Spring自動配線@Qualifierの例
Springでは、@Qualifierは、フィールドにautowiredするBeanを意味します。以下のシナリオを参照してください。
オートワイヤリングの例
以下の例を参照してください。これは、 “person” beanを顧客のpersonプロパティにautowiredします。
package com.mkyong.common;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
public class Customer {
@Autowired
private Person person;
//...
}
しかし、2つの同様のbean “com.mkyong.common.Person`”は、Bean設定ファイルで宣言されています。 Springはどの人のbeanがautowiredすべきかを知っていますか?
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean
class ="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
<bean id="customer" class="com.mkyong.common.Customer"/>
<bean id="personA" class="com.mkyong.common.Person" >
<property name="name" value="mkyongA"/>
</bean>
<bean id="personB" class="com.mkyong.common.Person" >
<property name="name" value="mkyongB"/>
</bean>
</beans>
上の例を実行すると、例外の下でヒットします:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:
No unique bean of type[com.mkyong.common.Person]is defined:
expected single matching bean but found 2:[personA, personB]....
=== @Qualifierの例
上記の問題を解決するには、SpringにautowiredするBeanを伝えるために** @ Quanlifier ** が必要です。
package com.mkyong.common;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
public class Customer {
@Autowired
@Qualifier("personA")
private Person person;
//...
}
この場合、bean "personA"はautowiredです。
Customer[person=Person[name=mkyongA]]….
ソースコードをダウンロードする
ダウンロードする – リンク://wp-content/uploads/2011/06/Spring-AutoWiring-Qualifier-Example.zip[Spring-AutoWiring-Qualifier-Example.zip](6 KB)