在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 ?
我想用@Produces
注释create()
,但是这需要让它是非静态的,并重写它,以便ConfigBean被注入,这需要重写JaxbConfigPersister
或创建一个包装器对象……做了太多的工作却一无所获。有没有更好的方法?
类似于
class JawaBot {
@Inject public JavaBot(@JawaConfig String configFilePathString) {
...
}
}
然后你只需要在某个地方生成一个代表你的配置的@JawaConfig String。然后可以用替代或专一化之类的东西来模拟,以提供diff配置,或者只是一些愚蠢的@Producer,用于查看其他外部文件/设置。
当你需要的时候,你只需要@Inject一个JawaBot,而不是所有其他的设置,所有的东西都存在于注入的构造函数中。