質問

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

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

サードパーティの jar 内の Bean の解決は、次のように宣言することで実現されますか? <alternatives> あなたの中で beans.xml?

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

jar をクラスパスに置くことは、存在しない限り機能しません。 beans.xml 彼らの中で META-INF, 、これはサードパーティの jar では実現できません。(見る この件に関するギャビン・キングの投稿)

役に立ちましたか?

解決

なぜそう複雑だと思う?

単にこれらのサードパーティクラスのproducerMethodを行います。

あなたは自動的にPDFファイルを受け取り、faximileごとに送信し、サードパーティのライブラリを持っていると仮定しましょう、そしてあなたは、

のようなものを使用したいです
private @Inject PdfFaxService faxService;

あなたのコードでは、あなたは単にプロデューサメソッドでこれを提供することができます。 PdfFaxServiceはステートレス働くので、私たちは安全に我々はそれが@ApplicationScoped作ることができると仮定することができます:

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

どこかでます。

HTHます。

他のヒント

私の理解 代替 それは、別のデプロイメント環境 (例:テスト環境)。アン 代替 Bean は、次の注釈を付けることで宣言されます。 @Alternative.

特定の展開シナリオで代替手段を使用するには、 <alternatives> CDI デプロイメント記述子の要素 META-INF/beans.xml. 。これにより、 @Alternative デフォルトでは無効になっている Bean です。

有効にすると、コンテナーが特定の注入ポイントのあいまいな依存関係を見つけた場合、注入できる代替案を調べ、正確に 1 つ存在する場合は、この代替案を選択します。

言い換えると、 代替案 を置き換える良い方法です 既存の実装 デプロイメント時に別のものを使用します。置き換えるものがない場合は、代替手段は必要ありません。jar をクラスパスに置くだけです。これがまさにあなたの質問であるかどうかはわかりませんが、サードパーティの jar の概念には疑問があります。

でより多くの 2.1.4.代替案, 4.6.代替案 そして 4.7.満たされていない曖昧な依存関係を修正する (しかし、あなたが読んでいるのはこれだと思います)。

アップデート: 追加の質問に答えるため。

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

これは起こり得ません。Bean アーカイブには bean.xml (空であっても)セクションで詳しく説明されています 15.6。パッケージ化と展開 ドキュメントの:

CDIは特別な展開アーカイブを定義していません。豆、ejb-jars、またはwarsに豆をパッケージ化できます。これは、アプリケーションクラスパスの展開場所です。ただし、アーカイブは、 しなければならない「Bean アーカイブ」になります。つまり、豆を含む各アーカイブに名前が付けられたファイルを含める必要があります beans.xml の中に META-INF クラスパスのディレクトリまたは WEB-INF ウェブルートの WARアーカイブ)。ファイルが空である可能性があります。のないアーカイブに配置された豆。 を持つ。 beans.xml ファイルは アプリケーションで使用可能。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top