【发布时间】:2009-05-18 19:24:11
【问题描述】:
我有一个需要“插件”接口的 Java 项目。我正在考虑加载某种具有默认方法的类文件,例如initialize() 和shutdown(),它们将在类加载到应用程序后调用。这是这样做的方法吗?我将如何解决这个问题?
【问题讨论】:
-
您是在询问动态加载类或定义类的初始化行为吗?
标签: java reflection dynamic-loading
我有一个需要“插件”接口的 Java 项目。我正在考虑加载某种具有默认方法的类文件,例如initialize() 和shutdown(),它们将在类加载到应用程序后调用。这是这样做的方法吗?我将如何解决这个问题?
【问题讨论】:
标签: java reflection dynamic-loading
【讨论】:
首先,您需要一个ClassLoader;你可以用getClass().getClassLoader() 得到当前的,但是你的插件类必须在类路径中。您可能需要创建一个自定义类加载器来搜索您的插件目录。
获得ClassLoader 后,您可以将其用于load a class。这给了你一个Class 对象;然后,您可以使用反射来调用 initialize() 方法(如果存在)。
【讨论】:
如果你看更复杂的东西,你可以试试:http://jpf.sourceforge.net。
... JPF 提供了一个动态发现和加载“插件”的运行时引擎。插件是一个结构化组件,它使用“清单”向 JPF 描述自己。 ...
【讨论】:
另一个实现插件的好方法是java.util.Serviceloader。看看javadocs,他们解释了原理。
【讨论】:
public class SomeClass {
static {
System.out.println("Being called with the class is loaded");
initialize();
}
static void initialize(){}
}
这是你的问题吗?
【讨论】: