有没有办法在程序启动后强制加载一个类?我有以下几种情况:我有一个包含Name和java.lang.Class插件类的hashmap。在每个插件类中,我有一个静态块registring类
static {
ClassMap.getInstance().register("name",MyPlugin.class);
}
我不知道此示例MyPlugin中的名称和包。所以我想这个代码将在programm启动时执行。这怎么可能?
答案 0 :(得分:1)
如果类对象在地图中,这意味着该类已经被加载,即您的静态块已经被执行。
另一方面,如果您只有类名(例如在列表中),您可以执行以下操作:
for(String classname : yourList){
// wrap with try / catch
Class.forName(className);
}
以下是what happens at class load time
的概述更新:你似乎想要的是一种组件扫描,它将找到你所有的插件类。使用普通Java无法做到这一点,但您可以例如使用reflections库来做到这一点。示例代码:
Reflections reflections = new Reflections("com.your.project");
Set<Class<? extends YourBaseClass>> subTypes =
// and all of these classes are already initialized
reflections.getSubTypesOf(YourBaseClass.class);