动态外部类加载

时间:2013-01-25 17:01:40

标签: java dynamic-class-loaders dynamic-class

我试图获得Java中动态类加载的经验。所以欢迎任何评论和帮助。我有一个程序,允许用户选择一个文件并对其执行一些操作。操作是“命令”,这些是我尝试加载的类。

它的工作方式是:用户将.class文件放入所需的文件夹,我的程序检查文件夹中的文件,如果.class文件中有类,则加载它。

我做到了,但不是我想要的。目前,它仅适用于使用我的程序编译的类。但我想要的是我可以把任何包含类的.class文件放在文件夹中,我的程序加载它。那是我现在的代码:

for (int i = 0; i < fileList.length; i++) {
    if (fileList[i].endsWith(".class")) {
        /////MY FIRT TRY/////ClassLoader myClassLoader = ClassLoader.getSystemClassLoader();
        ClassLoader classLoader = FileMod.class.getClassLoader();

        // Define a class to be loaded.
        String classNameToBeLoaded = fileList[i].replace(".class", "");

        // Load the class
        try {
            /////MY FIRST TRY/////Class myClass = myClassLoader.loadClass(classNameToBeLoaded);
            //if the class exists in the file
            Class aClass = classLoader.loadClass(classNameToBeLoaded);
            classList.add(aClass);
            System.out.println("CLASS FOUND : " + classNameToBeLoaded + aClass.getSuperclass());
        } catch (ClassNotFoundException e) {
            System.out.println("CLASS NOT FOUND : " + classNameToBeLoaded);
            continue;
        }
    }
}

正如您所看到的,我尝试过两种方式,第一种方式目前正在评论中。我所做的是检查文件夹中的每个文件,并检查它是否是.class文件,如果是,我尝试加载该类,如果有的话。我猜两个classLoaders只能加载他们“知道”的文件,所以如何加载外部类。

1 个答案:

答案 0 :(得分:2)

您通常需要一个新的类加载器。使用java.net.URLClassLoader.newInstance。但是要小心,您现在正在从外部将类加载到您的应用程序中。

(某些类加载器会允许您添加位置,但这是真正的黑客攻击。)