1

有没有办法在程序启动后强制加载类?我有以下情况:我有一个包含插件类的名称和 java.lang.Class 的哈希图。在每个插件类中,我都有一个注册该类的静态块

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

我不知道这个例子中 MyPlugin 的名称和包。所以我希望这段代码将在程序启动时执行。这怎么可能?

4

1 回答 1

1

如果类对象在映射中,这意味着该类已经加载,即您的静态块已经执行。

另一方面,如果您只有类名(例如在列表中),您可以这样做:

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);
于 2012-08-01T15:35:29.927 回答