ここでの問題の一部は、適切な語彙を使用することです。そのため、用語の単純な問題である可能性があることを前もってお詫びします。
Person
インターフェイスと、そのインターフェイスを実装するクラスPersonBean
があるとします。
さらに@Produces
、 を返す (注釈付きの)プロデューサー メソッドがどこかにあるとしますPerson
。内部的には newPersonBean
を返しますが、それはここにもありません。
最後に、次のように定義された注入ポイントを持つ別の CDI Bean があるとします。
@Inject
private Person person;
すべてのbeans.xml
ファイルが配置され、Weld または別の CDI-1.0 準拠の環境がブートストラップされていると仮定すると、あいまいな定義エラーが発生します。これは理にかなっています: Weld は myPersonBean
をインジェクションの候補として見つけ (コンストラクターを呼び出すだけでよい)、私のプロデューサー メソッドの出力をインジェクションの候補として見つけます。
私がやりたいことはPerson
、このアプリケーションでのインスタンスの生成が常にプロデューサー メソッドを経由するように強制することです。
どこかで何らかの修飾子を発明Person
し、その修飾子によって修飾されるインスタンスをプロデューサー メソッドに生成させることができることを理解しています。私がそれを行い、修飾子を含むように注入ポイントを変更すると、明らかにこれらの修飾された注入可能オブジェクト (つまり、私のプロデューサー メソッド) のソースは 1 つしかないため、出来上がり、問題は解決しました。
しかし、偽の修飾子を発明したくないとします。(これが事実だと言っているわけではありません。問題をより深く理解しようとしているだけです。) どのような選択肢がありますか? 私は持っていますか?CDIに見えないようにするために を@Typed(Object.class)
つければいいのかな…。PersonBean
Person
ドキュメントへのポインタ、またはこれを理解するためのより良い方法など、あらゆるアイデアを歓迎します。ありがとう。