独自のプロキシ Bean を作成する既存の CDI 拡張機能を変更しようとしています。これで、サービスごとに 1 つのプロキシのみが作成されます。サービスにはアプリケーション スコープのようなものがあるため、サービスのインスタンスは常に 1 つだけです。
私が達成したいことは、すべての注入ポイントに対して単一のプロキシ Bean を作成することです。特定の注入ポイントに固有の情報を保存するために必要です。同じサービスに対してより多くの注入ポイントがある場合、より多くのプロキシ Bean が存在しますが、それらの背後にあるサービスの 1 つのインスタンスは依然として存在します。ただし、このように動作を変更すると、まったく同じ 2 つのプロキシから選択できないため、Weld はあいまいな依存関係について不平を言います。
どうすればこれを修正できますか? 基本的に、私がしていることは、イベントを観察しProcessBean
、発見されたすべての Bean の注入ポイントごとに新しいプロキシを作成することです。次に、メソッドを使用してこれらすべてのプロキシ Bean をコンテナーに追加しますAfterBeanDiscovery#addBean
。この最後のステップをスキップして手動で注入ポイントに注入するか、注入する正しい Bean を選択する決定に影響を与えることができるようにする必要があります。注入ポイントと、そこに注入できるあいまいな依存関係のリストが与えられた場合、その属性に基づいて正しいものを選択できます。しかし、Weld でこの決定を下すことが可能かどうか、またどのようにしてそれを行うことができるかはよくわかりません。
編集:単に私がやりたいことは、@Dependent
特定の注入ポイントに関連する追加情報を保存できるプロキシを使用して、同様の独自のスコープを実装することです。
EDIT2:特定の注入ポイントに関する情報を運ぶ新しい修飾子を作成することで、最終的に修正しました。この修飾子は、注入ポイントとそのプロキシの両方に追加されます。しかし、修飾子コレクションの変更を可能にする独自の実装で注入ポイントを置き換える必要があるため、これはあまり良い解決策ではありません。もっとエレガントな解決策が必要だと思います。思いつくことがあれば教えてください。