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)