ジャカルタEE 8 - C . D . I .を理解する(パート2)-あなたの豆を予選してください.


[私たちがこのシリーズを続けているように、我々はいくつかの内容と例を参照してくださいCDI 2.x specification ].
サービス契約を認証するためにBeanを1つ以上実装していると仮定するか、または別の目的のために使用するBeanの1つ以上のバージョンを持っていると仮定します.
代わりに豆の選択のための別のコードを書くの豆、選択の選択肢を使用して展開時に行うことができます選択.

代替Beansの定義
Beanをルックアップ、インジェクションまたはEL解決のために利用できるようにするには、あなたの豆を注釈します@Alternative 集合javax.enterprise.inject.Alternative ).
@Alternative
public class MockOrder extends Order { ... }
デフォルトで@Alternative Beansは無効です.それらは編集によって特定のBeanアーカイブのためにのみ活性化されるbeans.xml . また、同じインターフェイスを実装するすべての注釈を持つことができます@Alternative . この場合、beans.xml ファイルを使用します.あなたが中で指定する選択肢beans.xml ファイルは同じアーカイブ内のクラスにのみ適用されます.

使用@Priority 選択肢を指定するには
複数のモジュールを使用している場合、アプリケーションに対してグローバルに代替ビーンを有効にするには@javax.annotation.Priority 注釈.
@Alternative
@Priority(100)
public class HighPriorityProcessor implements Processor { ... }
同じインターフェイスを実装するいくつかの代替Beanが注釈されている場合は、優先度の高い値の代替を選択します@Priority . このオプションを指定する必要はありませんbeans.xml ファイルを使用するとき@Priority 注釈.

例03:CDI注射@Alternative Bean (インタフェースによる注入, 2つの異なる実装)
チュートリアルソースコードを見つけることができますhere 実行可能なクラスファイルが見つかるhere . The Service インタフェースには2つの異なる実装があります.DefaultService and AlternativeService (注釈付きの@Alternative ).
The MainController 注射するService と活性化しないAlternativeService , the DefaultService として暗黙のうちに修飾される@Default 修飾子).
我々がそれを確実にしたいならばAlternativeService 注入されるMainController , 内部で活性化beans.xml (ソースコードが見つかります.here ).
    <alternatives>
        <class>za.co.sindi.tuts.jakartaee.cdi.example03.AlternativeService</class>
    </alternatives>
ランニングDefaultCDIMain クラスでは、出力代替サービスの仕事が表示されます.
将来のチュートリアルでは@Stereotypes また、CDIに工場方法を適用する方法.