CDI: Как позаботиться о конфигурации бинов? - PullRequest
0 голосов
/ 23 июля 2011

Как настроить мои 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 или создать объект-оболочку. .. Слишком много работы ни за что. Есть ли лучший подход?

1 Ответ

2 голосов
/ 29 июля 2011

Что-то вроде:

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

      ...
  }
}

Тогда вам просто нужно создать строку @JawaConfig где-нибудь, которая представляет вашу конфигурацию.Затем это может быть смоделировано с помощью чего-то вроде альтернативы или специализации, чтобы дать вам конфигурацию различий, или просто небольшим глупым @Producer, который смотрит на какой-то другой внешний файл / настройку.

Тогда вы просто @ Inject JawaBot, когда хотите, вместо всех других настроек, и все просто живет в инжектированном конструкторе.

...