2011-07-23 72 views
0

在CDI中,我如何配置我的bean?CDI:如何照顧豆配置?

比方說,我有這樣的代碼:

class JawaBotApp { 
    private void init(String configFilePathString) throws JawaBotException { 
     ConfigBean cb = new JaxbConfigPersister(configFilePathString).load(); 
     JawaBotApp.jawaBot = JawaBot.create(cb); 
    } 
} 

class JawaBot { 
    public static JawaBot create(ConfigBean cb) throws JawaBotException{ 
     JawaBot bot = new JawaBot(); 
     bot.applyConfig(cb); 
     bot.init(); 
     return bot; 
    } 
} 

我將如何轉換它,既可以是CDI豆?

我想到了註解create()@Produces,然而這將需要把它非靜態,並改寫它,因此ConfigBean被注入,這將需要重寫JaxbConfigPersister或創建一個包裝對象...太辛苦了不求回報。 有沒有更好的方法?

回答

2

喜歡的東西:

class JawaBot { 
    @Inject public JavaBot(@JawaConfig String configFilePathString) { 

     ... 
    } 
} 

然後你只需要在一些地方產生@JawaConfig字符串代表您的配置。這可能會被替換或專門化爲給你一個diff配置,或者只是一些愚蠢的@Producer看起來在其他外部文件/設置。

然後,你只需@注入一個JawaBot當你想要它而不是所有其他的設置,並且所有東西都只存在於注入的構造函數中。

+0

聽起來不錯,會試試。 –