CDI:如何处理bean配置



在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,而不是所有其他的设置,所有的东西都存在于注入的构造函数中。

最新更新