独自のプロキシビーンを作成する既存のCDI拡張を修正しようとしています。現在、各サービスに対して作成されるプロキシは1つだけです。サービスにはアプリケーションスコープのようなものがあるため、サービスのインスタンスは常に1つだけです。CDI拡張であいまいな依存関係を解決する
私が達成したいのは、すべての注入ポイントに対して1つのプロキシBeanを作成することです。与えられた注入点に特有の情報を保存するためにそれらが必要です。同じサービスに複数の注入ポイントがある場合は、より多くのプロキシビーンが存在しますが、それらの背後にはサービスの単一のインスタンスが存在します。しかし、このように振る舞いを変えると、Weldはまったく同じプロキシを2つ選ぶことができないため、あいまいな依存関係について不平を言っています。
どうすればこの問題を解決できますか?基本的には、ProcessBean
イベントを観察し、発見されたすべてのBeanの各注入ポイントに対して新しいプロキシを作成しています。次に、私はAfterBeanDiscovery#addBean
メソッドを使用して、これらのプロキシビーンをすべてコンテナに追加します。私は何とかこの最後のステップをスキップして手動で注入ポイントに注入するか、注入する正しいBeanを選択する決定に影響を与える必要があります。注入ポイントと注入可能なあいまいな依存関係のリストを与えられたら、その属性に基づいて正しいものを選ぶことができます。しかし、Weldのためにこの決定をすることが可能かどうか、どうすればいいのかは分かりません。
EDIT:単に私がやりたいことは@Dependent
のが、私は与えられた注入ポイントに関連するいくつかの追加情報を格納可能なプロキシと同様の自分のスコープを実装することです。
EDIT2:私は最終的に、特定の注入点に関する情報を運ぶ新しい修飾子を作成することでそれを修正しました。この修飾子は、注入ポイントとそのプロキシの両方に追加されます。しかし、私は注入点を修飾子コレクションの変更を可能にする独自の実装に置き換えなければならないので、それほど素晴らしい解決策ではありません。もっと洗練されたソリューションが必要だと思います。あなたが何かを考えることができるなら、私に知らせてください。
私が正しく理解しているのであれば、元の豆を拒否することです。しかし、これは私の場合は問題ではありません。なぜなら、注入ポイントには合わず、メソッドが呼び出されたときにプロキシによって手動で検索されるからです。問題は、同じタイプと修飾子を持つ2つの注入点があり、まったく同じ2つのプロキシが(それらの内部の異なる設定でのみ)作成されている場合です。 – livthomas
それでは、私はあなたのテキストを誤解しているかもしれません。コードスニペットが役に立ちます。注射の候補は、1)元の豆、2)あなたの新しく作成された代理人だと思った。 – Siliarus
実際、プロジェクトはオープンソースなので、すべて見ることができます。私はここで[このコミット](https://github.com/SilverThings/SilverWare/commit/abb44eae805f78f8b88959bd740f9d31cfe042d8)で説明した変更を行いました。 – livthomas