最も簡単な解決策はなお@Resource
@Resource(name="bean1")
public void setBean(BeanType bean) {
}
を使用する、@Qualifier
が@Autowired
で使用するためのIDによって豆を指すために使用、例えばbean1
でのIDである
@Autowired @Qualifier("bean1")
public void setBean(BeanType bean) {
}
であります注入すべき豆。
がSpring manualを参照してください:
代替試合のために、Bean名は、デフォルトの修飾子の値とみなされます。したがって、ネストされた修飾子の代わりにidが "main"のBeanを定義すると、同じ結果が得られます。しかし、このコンベンションを使用して特定のBeanを名前で参照することはできますが、@Autowired
は基本的にオプションのセマンティック修飾子を使用した型駆動型注入です。つまり、修飾子の値は、Bean名のフォールバックを指定しても、常にタイプの一致のセット内でセマンティクスが狭くなります。それらは一意のBean IDへの参照を意味的に表現しません。
と
名前で、アノテーション駆動型の注入を表現する場合は、主に@Qualifier
値を通じてBean名を参照するのは技術的に可能であったとしても、@Autowired
を使用しないでください。代わりに、JSR-250 @Resource
アノテーションを使用します。これは、特定のターゲットコンポーネントを固有の名前で識別するために意味的に定義されています。宣言されたタイプは、マッチングプロセスとは関係ありません。
私は@Resource
を好んでいます(春に固有のものではありません)。
ええと... @Qualifierが豆を見つけていないので、何か間違ったことがあったはずです。 '@ Resource'は動作します。あなたは '@修飾子'が本当にIDのために働いていることを確認できますか?ドキュメントによると、Beanには ''要素が必要です。 –
@Aaron:各アプローチの振る舞いは、実際には微妙に異なります。 '@ Autowired'で' @ Qualifier'を使うとき、修飾子は '@ Autowired'によって与えられたオプションを絞り込むために使われますが、' @ Resource'は明示的に名前でBeanを選択します。 – skaffman
@Aaron:編集を参照してください – skaffman