代替手段についての私の理解では、それは、別の展開環境 (テスト環境など) で使用できるインターフェイスの他の実装の代替手段であるということです。代替Bean は、 で注釈を付けることによって宣言されます@Alternative
。
<alternatives>
特定のデプロイメント シナリオで代替を使用するには、CDI デプロイメント記述子の要素でそれを選択しますMETA-INF/beans.xml
。これ@Alternative
により、デフォルトで無効になっている Bean が有効になります。
有効にすると、コンテナーは、特定の注入ポイントに対してあいまいな依存関係を検出した場合、注入できる代替を調べ、1 つだけある場合は、この代替を選択します。
言い換えれば、代替手段は、展開時に既存の実装を別の実装に置き換える優れた方法です。置き換えるものが何もない場合は、代替手段は必要ありません。jar をクラスパスに置くだけです。これがまさにあなたの質問だったかどうかはわかりませんが、サードパーティの jar の概念については疑問があります。
詳細は2.1.4 で。代替案、4.6。代替案と4.7。満たされていないあいまいな依存関係を修正します (しかし、これはあなたが読んでいるものだと思います)。
更新:追加の質問に答えるために。
そうでない場合は、beans.xml を持たないサードパーティ ライブラリの Bean を使用する方法
セクション15.6で説明されているように、Bean アーカイブにはbean.xml
(空であっても) が必要です。ドキュメントのパッケージ化と展開:
CDI は、特別なデプロイメント アーカイブを定義しません。Bean は、JAR、EJB-JAR、または WAR (アプリケーション クラスパス内の任意のデプロイメント場所) にパッケージ化できます。ただし、アーカイブは
「bean アーカイブ」でなければなりません。つまり、Bean を含む各アーカイブには、クラスパス
のディレクトリまたは Web ルートのディレクトリ (WAR アーカイブの場合) に指定さbeans.xml
れ
たファイルが含まれている必要があります。ファイルが空である可能性があります。ファイルを持たないアーカイブにデプロイされた Beanは、アプリケーションで使用できません。META-INF
WEB-INF
beans.xml
次に、満たされていないあいまいな依存関係を修正するには、前述のセクション 4.7 を参照してください。
更新 2:を使用BeforeBeanDiscovery.addAnnotatedType()
すると、Bean の検出中に考慮される他のクラスを追加できるようです。(BeforeBeanDiscovery
はイベントです)