自动装配示例
参见下面的例子,它会自动装配“person” bean 到 customer 的 person 属性。
package com.h3.common;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.beans.factory.annotation.qualifier;
public class customer {
@autowired
private person person;
//...
}
但是,两个类似的 bean “com.h3.common.person” 在 bean 配置文件中声明。spring会知道哪个person bean应当自动装配?
<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.h3.common.customer" />
<bean id="persona" class="com.h3.common.person" >
<property name="name" value="h3a" />
</bean>
<bean id="personb" class="com.h3.common.person" >
<property name="name" value="h3b" />
</bean>
</beans>
当你运行上面的例子,它产生以下异常:
caused by: org.springframework.beans.factory.nosuchbeandefinitionexception:
no unique bean of type [com.h3.common.person] is defined:
expected single matching bean but found 2: [persona, personb]
@qualifier示例
要解决上述问题,需要使用 @quanlifier 告诉spring哪些bean应当自动装配。
package com.h3.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” 会被自动装配。
customer [person=person [name=h3a], type=1, action=buy]