包括Java类并在运行时运行它们

时间:2009-05-18 19:24:12

标签: java reflection dynamic-loading

我有一个需要“插件”界面的Java项目。我正在考虑加载某些类文件,这些类文件具有initialize()shutdown()之类的默认方法,这些方法将在将类加载到应用程序后调用。这是这样做的吗?我该如何处理这个问题?

5 个答案:

答案 0 :(得分:3)

查看Class类,特别是forName方法,它允许您按名称引用类。路径中的任何类都可以像这样加载。是否重新加载是可能的,我不知道。

在任何情况下,您要动态加载的每个类都必须实现自定义AddOn接口,从而实现initializeshutdown

答案 1 :(得分:1)

首先,您需要一个ClassLoader;您可以使用getClass().getClassLoader()获取当前的那个,但是您的插件类必须位于类路径中。您可能想要创建一个自定义类加载器来搜索您的插件目录。

获得ClassLoader后,您可以将其用于load a class。这会给你一个Class个对象;然后,您可以使用反射调用initialize()方法(如果存在)。

答案 2 :(得分:1)

如果你看一些更复杂的东西,你可以尝试:http://jpf.sourceforge.net

... JPF提供了一个动态发现和加载“插件”的运行时引擎。插件是一个结构化组件,它使用“清单”向JPF描述自己。 ...

答案 3 :(得分:0)

实现插件的另一个好方法是java.util.Serviceloader。看看javadocs,他们解释了原理。

答案 4 :(得分:-1)

public class SomeClass { 
    static {
        System.out.println("Being called with the class is loaded");
        initialize();
    }
    static void initialize(){}
}

这是你的问题吗?