6

ほんの数か月前に仕様がリリースされたので、まだあまり普及していないことはわかっています。

私はまだ溶接を「インストール」していません。読んでいるだけです。この質問によって、この重要な点を正しく理解していることを確認したいと思います。

サードパーティの jar にある Bean の解決は<alternatives>beans.xml.

そうでない場合、持っていないサードパーティのライブラリから Bean を使用する方法はbeans.xml?

jar をクラスパスに置くことは、サードパーティの jar に当てはまらない にない限り機能しbeans.xmlませMETA-INFん。(この件に関する Gavin King の投稿を参照してください)

4

2 に答える 2

6

なぜそんなに複雑に考えるのですか?

これらのサードパーティ クラスの producerMethod を作成するだけです。

PDFファイルを自動的に取得してFAXで送信するサードパーティのライブラリがあり、次のようなものを使用したいとします。

private @Inject PdfFaxService faxService;

コードで、プロデューサー メソッドを使用してこれを提供するだけです。PdfFaxService はステートレスで動作するため、安全に作成できると想定できます@ApplicationScoped

public @Produces @ApplicationScoped PdfFaxService createFaxService() {
  return new PdfFaxService(initparameters);
}

どこか。

h番目。

于 2010-02-26T20:37:37.437 に答える
3

代替手段についての私の理解では、それは、別の展開環境 (テスト環境など) で使用できるインターフェイスの他の実装の代替手段であるということです。代替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-INFWEB-INFbeans.xml

次に、満たされていないあいまいな依存関係を修正するには、前述のセクション 4.7 を参照してください。

更新 2:を使用BeforeBeanDiscovery.addAnnotatedType()すると、Bean の検出中に考慮される他のクラスを追加できるようです。(BeforeBeanDiscoveryはイベントです)

于 2010-02-15T10:02:49.303 に答える