我有一个需要“插件”界面的Java项目。我正在考虑加载某些类文件,这些类文件具有initialize()
和shutdown()
之类的默认方法,这些方法将在将类加载到应用程序后调用。这是这样做的吗?我该如何处理这个问题?
答案 0 :(得分:3)
查看Class类,特别是forName方法,它允许您按名称引用类。路径中的任何类都可以像这样加载。是否重新加载是可能的,我不知道。
在任何情况下,您要动态加载的每个类都必须实现自定义AddOn
接口,从而实现initialize
和shutdown
。
答案 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(){}
}
这是你的问题吗?