CDI:如何处理bean配置?

时间:2011-07-23 16:36:22

标签: configuration initialization cdi

在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或者创建一个包装器对象...太多无效的工作。 有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

类似的东西:

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

      ...
  }
}

然后你只需要在某个地方生成一个代表你的配置的@JawaConfig字符串。然后可以使用类似替代或专门的东西模拟出来给你一个diff配置,或者只是看一些其他外部文件/设置的一些愚蠢的小@Producer。

然后你只需要@Inject一个JawaBot而不是所有其他设置,并且所有内容都只存在于注入的构造函数中。