web-dev-qa-db-ja.com

IDでSpring依存関係を注入するにはどうすればよいですか?

同じタイプ(BeanType)のBeanがいくつかあります。アノテーションを付けてIDで挿入するにはどうすればよいですか?いう:

@Autowired @ID("bean1")
public void setBean( BeanType bean ) {
}

しかし、注釈はありません@ID

@Qualifierこれは、すべてのBean IDにand修飾子を指定する必要があることを意味します。確かに、もっと簡単な方法がありますか?

29
Aaron Digulla

最も簡単な解決策は、@Resourceを使用することです

@Resource(name="bean1")
public void setBean( BeanType bean ) {
}

ちなみに、@Qualifierisは、@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固有ではありません)。

69
skaffman