2016-09-11 9 views
0

私は、DIを介して設定インターフェースを実装するクラスを持っています。設定ファイルの値に基づいて依存関係を注入する

@Inject 
private PRCConfiguration prcConfig; 

PRCConfigurationインターフェイスのさまざまな実装があります。現在、デフォルト実装をインジェクトしています。私は、設定するテキストファイルにPRCCOnfigurationの特定のインプリメンテーションをインジェクトするための値を作成したいと考えています。 私は、@Inject表記がconfigファイルにどの値が含まれているかを検証し、それに基づいて特定の実装を挿入したいと考えています。

私は、このような

@Inject @NewImplementation 
private PRCConfiguration prcConfig; 

として、我々は修飾子によって異なる実装に注釈を付けた後、注入することができると信じてしかし、再び、私はハードコーディングによってコンパイル時に注入しています。

私の設定ファイルは、私は別の実装を注入することにしたい、その後場合は、@NewImplementationの実装を注入する

"injectconfig":"NewImplementation" 

ようなものになるだろう。私はちょうど

"injectconfig":"DifferentImplementation" 

として設定ファイルの値を変更することができ、異なる実装が注入されます。

私はCDIで可能なことはありますか?

答えて

2

producer methodsを使用すると、そのようなことが実現できます。

基本的には、正しい構成インスタンスを返し、@Producesと注釈を付けるメソッドであるCDI Beanを作成するだけです。このような

何か:あなたは@Vetoedとの両方の実装を注釈を付けなければならないか、あいまいな依存関係のエラーが発生します。この場合

@ApplicationScoped 
public class ConfigurationProducer { 

    @Produces 
    @ApplicationScoped 
    public PRCConfiguration getConfig() { 

     if(someCondition) { 
      return new NewConfigurationImpl(); 
     } 
     else { 
      return new OldConfigurationImpl(); 
     } 

    } 

} 

。実装上で@Vetoedを使用すると、プロデューサを使用するのがPRCConfigurationのインスタンスを取得する唯一の方法であることがCDIに伝えられます。

+0

ありがとうたくさんのバディ! – Saad

+0

もう一度@Vetoedを+1した場合、それ以外の場合はデバッグに時間がかかりましたが、Java ee 7でしか使用できないようです。 – Saad

+0

Jbossは@Vetoedを見つけることができません – Saad

関連する問題