2012-08-01 134 views
1

有沒有在程序啓動後強制加載類的方法?我有以下情況:我有一個包含插件類的Name和java.lang.Class的HashMap。在每個插件類,我有一個靜態塊在註冊類在程序啓動時在java中強制加載一個類

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

我不知道在這個例子中爲myplugin的名稱和包。所以我希望這個代碼將在程序開始時執行。這怎麼可能?

回答

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); 
+0

我知道,但該類不在地圖中。爲什麼我要強制執行'ClassMap.getInstance()。register(「name」,MyPlugin.class);'在程序開始 – 2012-08-01 15:37:59

+0

啊,我明白了,這是一個完全不同的問題。您需要某種組件掃描。我會馬上回來 – 2012-08-01 15:39:39

+0

@ Wolf-Dieter看到我的更新 – 2012-08-01 15:42:56