web-dev-qa-db-ja.com

アノテーションを使用した名前によるSpring Beanの自動配線

Springsの最新バージョンでは、注釈を@Autowiredとして使用してBeanを自動配線できます。これは、そのタイプ(または適用される場合はコンストラクター)を使用してBeanを自動配線します。 SpringのXMLファイルでautowire = "byName"として注釈なしで行っていたBean名に基づいて@Autowired注釈を使用する方法はありますか?

48
Anand

JSR-250を使用できます@Resourceコンストラクターインジェクションまたはマルチパラメーターメソッドインジェクションが必要な場合を除き、名前によるBean自動配線の場合。

ドキュメントから:

アノテーション駆動型インジェクションを名前で表現する場合は、@ Qualifier値を使用してBean名を技術的に参照できる場合でも、主に@Autowiredを使用しないでください。代わりに、JSR-250 @Resourceアノテーションを使用します。これは、一意の名前で特定のターゲットコンポーネントを識別するためにセマンティックに定義されており、宣言されたタイプはマッチングプロセスとは無関係です。

46
soulcheck

次を使用できます。

@Autowired
@Qualifier("beanname")

@ Qualifier javadoc

この注釈は、自動配線時に候補Beanの修飾子としてフィールドまたはパラメーターで使用できます。

99
Biju Kunjummen

名前による自動配線を台無しにしていたBeanネームプロキシを使用していました。 @Resourceはタイプを気にしないので、その問題はありませんでした。だから今、私はSpring開発者によるこの勧告の1つの理由を知っています:-)

2
jeet

DIコンテナに登録されるBeanの名前を定義する場合、アノテーション自体に名前を渡すことができます。 @ Service(“ employeeManager”)。

次に、以下のコードを使用して、名前による自動配線を有効にできます

@Autowired
@Qualifier("employeeManager")
private EmployeeManagerService employeeManagerService;
2
tinku

BeanのJavaクラス定義で@Component( "beanname")を使用します

次に、自動配線でJSR 330を使用します

@Inject @Named(Value = "beanname")

1
Nandan