在CDI中,我该如何配置我的bean?
假设我有这段代码:
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 bean?
我考虑过使用create()
注释@Produces
,但是需要将其设置为非静态,并重写它以便注入ConfigBean,这需要重写JaxbConfigPersister
或者创建一个包装器对象...太多无效的工作。
有更好的方法吗?
答案 0 :(得分:2)
类似的东西:
class JawaBot {
@Inject public JavaBot(@JawaConfig String configFilePathString) {
...
}
}
然后你只需要在某个地方生成一个代表你的配置的@JawaConfig字符串。然后可以使用类似替代或专门的东西模拟出来给你一个diff配置,或者只是看一些其他外部文件/设置的一些愚蠢的小@Producer。
然后你只需要@Inject一个JawaBot而不是所有其他设置,并且所有内容都只存在于注入的构造函数中。