Spring的@Autowired注解是如法分辨出两个类似的bean,也就是说如果配置文件中出现两个类似的bean@Autowired注解将无法实现自动装配功能。
只有一个bean的实例:
public class Customer {
@Autowired
private Person person;
//...
}
只有一个bean的配置文件如下:
xsi:schemaLocation="
http://www.springframework.org/schema/beans
<context:annotation-config />
<bean id="CustomerBean" class="com.yiibai.common.Customer">
</bean>
<
bean id="PersonBean" class="com.yiibai.common.Person">
<property name="name" value="yiibai" />
<property name="address" value="address ABC" />
<property name="age" value="29" />
</bean>
</beans>
通常情况下@Autowired会根据配置文件信息,自动给Customer类中的person属性装配PersonBean值。但是如果此时配置文件里面还有一个person实例,如下所示,有两个bean的配置文件:
xsi:schemaLocation="
http://www.springframework.org/schema/beans
<context:annotation-config />
<bean id="CustomerBean" class="com.yiibai.common.Customer">
</bean>
<bean id="PersonBean1" class="com.yiibai.common.Person">
<property name="name" value="yiibai" />
<property name="address" value="address ABC" />
<property name="age" value="29" />
</bean>
<bean id="PersonBean2" class="com.yiibai.common.Person">
<property name="name" value="yiibai" />
<property name="address" value="address ABC" />
<property name="age" value="29" />
</bean>
</beans>
这个时候,@Autowired就无法决定该选择哪一个personbean来装配person属性。因此,需要引入@Qualifier注解用来控制应该使用哪一个来自动装配,如下所示:
public class Customer
{
@Autowired
@Qualifier("PersonBean1")
private Person person;
}