同じタイプ(BeanType
)のBeanがいくつかあります。アノテーションを付けてIDで挿入するにはどうすればよいですか?いう:
@Autowired @ID("bean1")
public void setBean( BeanType bean ) {
}
しかし、注釈はありません@ID
。
@Qualifier
これは、すべてのBean IDにand修飾子を指定する必要があることを意味します。確かに、もっと簡単な方法がありますか?
最も簡単な解決策は、@Resource
を使用することです
@Resource(name="bean1")
public void setBean( BeanType bean ) {
}
ちなみに、@Qualifier
isは、@Autowired
で使用するためにIDでBeanを参照するために使用されていました。
@Autowired @Qualifier("bean1")
public void setBean( BeanType bean ) {
}
ここで、bean1
は、注入されるBeanのIDです。
Springマニュアル を参照してください。
フォールバック一致の場合、Bean名はデフォルトの修飾子値と見なされます。したがって、入れ子になった修飾子要素の代わりにIDが「main」のBeanを定義して、同じ一致結果を得ることができます。ただし、この規則を使用して特定のBeanを名前で参照することはできますが、
@Autowired
は基本的に、オプションのセマンティック修飾子を使用した型駆動型の注入に関するものです。これは、Bean名のフォールバックがあっても、修飾子の値は常に、一致するタイプのセット内でセマンティクスを狭めることを意味します。一意のBean IDへの参照を意味的に表現していません。
そして
アノテーション駆動型の注入を名前で表現する場合は、技術的に
@Autowired
値を介してBean名を参照できる場合でも、主に@Qualifier
を使用しないでください。代わりに、意味的に定義されているJSR-250@Resource
アノテーションを使用して、特定のターゲットコンポーネントを一意の名前で識別します。宣言された型はマッチングプロセスには関係ありません。
私は@Resource
を好みます。これはよりクリーンです(Spring固有ではありません)。