たとえば、別の Bean をプロパティとして参照する Bean を含む Bean 定義ファイルを含む春のプロジェクトがあります。
<bean id="aBean" class="org.test.class">
<property class="org.test.A" autowire="byType"/>
</bean>
この Bean 定義ファイルは、org.test.A を拡張する Bean を含む場合と含まない場合がある他の Spring プロジェクトによってインポートされます。
私がやりたいのは、org.test.A の拡張機能の実装 (つまり org.test.B) が存在する場合、それをプロパティで参照したいということです。それ以外の場合は、単に org.test.A を参照します。
私はこの問題についていくつかの調査を行ってきましたが、答えに達していません。カスタム TypeFilter を作成しようとしましたが、クラスの既存のすべての Bean 定義をチェックして選択するのではなく、クラスを返す必要があるかどうかにかかわらず、true または false を返すことができるようです。
そのようなことは可能ですか?もしそうなら、どのようにそれを行うつもりですか?
アイデアは、相互に参照する Bean 定義の束を書き直す必要がないようにすることです (そして、ほとんどの場合、すべてのプロジェクトですべて同じになります) および参照される Bean の実装のみを記述します。
この問題に関するご意見をお待ちしております。
----- 更新 1 ------
@Primary を使用して試してみましたが、これまでのところ運がありません。エラーはありませんが、使用されているクラスは @Primary のものではありません。
メイン クラス org.test.A は別のクラス (org.test.Whatever) を拡張し、サーブレット コンテキストでは次のようになります。
<bean id="someID" class="org.someclass">
<property name="realm" ref="testBean" />
</bean>
そして、org.test.A を拡張し、@Component と @Primary の両方を持つ別の org.test.B クラスを作成しましたが、うまくいきません。Spring はクラスをロードしているようですが、使用していないようです。
----- 更新 2 -----
わかりました、何が起こっているか知っていると思います。私が自動配線しているクラス (ソース コードを制御できない) には、2 つのセット メソッドがあり、1 つは単一のクラスを取り、もう 1 つはそのクラスのコレクションを受け取ります。Spring は、同じクラスの複数の Bean を見つけるため、単一のインスタンスを取るセットを自動配線するのではなく、コレクションを取るセットを自動配線する必要があると考えているようです。
クラスをインスタンス化しているコンテキストxmlで、どのメソッドを自動配線する必要があるかを指定するにはどうすればよいですか? プロパティで autowire 属性を使用できない理由がわかりません。自動配線する方法を選択するために春を残すBeanにのみ自動配線を設定できます。:S