2011-01-21 24 views
1

我想注入一些數據到靜態類字段,這是從大量的XML文件生成的。用於自定義類初始化的輕量級類加載器?

class Foo { 
    ... 
    static MetaData xxx; 
    static MetaData yyy; 
} 

注射是非常簡單的,它發現Foo.properties並解析XXX,YYY屬性,然後構造所述元數據的實例。

我不確定IoC容器是否可以幫助完成這項任務,但似乎沒有。

因爲Foo可能被未被IoC容器加載的類使用。

我的想法是,修改上下文類加載器以添加一些基於反射的特定類初始化代碼。

有什麼想法?

編輯有很多IoC容器,我想其中有些可能支持初始化擴展。

+1

`因爲Foo可能被未被IoC容器加載的類使用。這可能沒有問題,但IoC通常需要一些配置/註釋,這可能是。你不能不修改ClassLoader,只需要找到所有的類或屬性文件,調用Class.forName並做一些反射?實際上,如果可能的話,我寧願通過創建一個Map >來避免它。 – maaartinus 2011-01-21 04:29:32

+0

不,擺脫Class.forName()是設計目的。不會有地圖,解析/構建過程非常快,MetaData是一個內部的弱引用來減少內存佔用量。 – 2011-01-21 04:36:51

回答

0

xxx,yyy初始化爲懶惰模式

如:

private static MetaData xxx=null; 
public static MetaData getXXX(){ 
    if(xxx=null){ 
     xxx=parse("Foo.properties"); 
    } 
    return xxx; 
} 

如果國際奧委會必須到您的程序,BeanPostProcessors在Spring可以是一個選擇。您可以解析文件並在BeanPostProcessor中創建MetaData對象。