java动态类加载器

时间:2009-11-24 14:05:59

标签: java classloader

如何使用两个参数动态加载Java中的类,这两个参数是类文件的绝对文件路径和我想调用的方法的名称?

例如path:c:\ foo.class    方法:print()

我只是对作为简单的cmd线工具的基础知识感兴趣。一个代码示例将不胜感激。

欢呼声恶作剧

2 个答案:

答案 0 :(得分:5)

使用URLClassLoader。方法的名称无关紧要。您必须将程序包的根目录传递给类加载器。然后,您可以使用Class.forName()中的完全限定类名(包+类名)来获取Class实例。您可以使用普通反射调用来创建此类的实例并在其上调用方法。

为了让您的生活更简单,请查看commons-beanutils。它使调用方法更加简单。

答案 1 :(得分:2)

结帐this example

// Create a File object on the root of the directory containing the class file
File file = new File("c:\\myclasses\\");

try {
    // Convert File to a URL
    URL url = file.toURL();          // file:/c:/myclasses/
    URL[] urls = new URL[]{url};

    // Create a new class loader with the directory
    ClassLoader cl = new URLClassLoader(urls);

    // Load in the class; MyClass.class should be located in
    // the directory file:/c:/myclasses/com/mycompany
    Class cls = cl.loadClass("com.mycompany.MyClass");
} catch (MalformedURLException e) {
} catch (ClassNotFoundException e) {
}

在此之后,你可以做这样的事情来首先使用默认构造函数创建一个新的instace并调用不带参数的方法“print”:

Object object = cls.newInstance();
cls.getMethod("print").invoke(object);