有没有办法在程序启动后强制加载类?我有以下情况:我有一个包含插件类的名称和 java.lang.Class 的哈希图。在每个插件类中,我都有一个注册该类的静态块
static {
ClassMap.getInstance().register("name",MyPlugin.class);
}
我不知道这个例子中 MyPlugin 的名称和包。所以我希望这段代码将在程序启动时执行。这怎么可能?
有没有办法在程序启动后强制加载类?我有以下情况:我有一个包含插件类的名称和 java.lang.Class 的哈希图。在每个插件类中,我都有一个注册该类的静态块
static {
ClassMap.getInstance().register("name",MyPlugin.class);
}
我不知道这个例子中 MyPlugin 的名称和包。所以我希望这段代码将在程序启动时执行。这怎么可能?
如果类对象在映射中,这意味着该类已经加载,即您的静态块已经执行。
另一方面,如果您只有类名(例如在列表中),您可以这样做:
for(String classname : yourList){
// wrap with try / catch
Class.forName(className);
}
这是对类加载时发生的事情的一个很好的概述
更新:您似乎想要的是一种组件扫描,它将找到您所有的插件类。使用纯 Java 无法做到这一点,但您可以例如使用反射库来做到这一点。示例代码:
Reflections reflections = new Reflections("com.your.project");
Set<Class<? extends YourBaseClass>> subTypes =
// and all of these classes are already initialized
reflections.getSubTypesOf(YourBaseClass.class);