在java中的程序启动时强制加载一个类

时间:2012-08-01 15:30:17

标签: java reflection classloader

有没有办法在程序启动后强制加载一个类?我有以下几种情况:我有一个包含Name和java.lang.Class插件类的hashmap。在每个插件类中,我有一个静态块registring类

static {
ClassMap.getInstance().register("name",MyPlugin.class);
}

我不知道此示例MyPlugin中的名称和包。所以我想这个代码将在programm启动时执行。这怎么可能?

1 个答案:

答案 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);