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)

リファレンス

  1. リンク://spring/spring-auto-wiring-beans-autowired-annotation/[Spring

@Autowired example]