spring自動裝配之@Qualifier註解的使用
阿新 • • 發佈:2019-02-08
當存在兩個型別一致的bean時,將會有什麼情況出現。我們一起來看看下面的例子:
例子
說明:如果已經看了上一篇教程,可以直接跳到第二步
第一步:建立bean
Customer類
package com.main.autowrite.autowired.annotation; import org.springframework.beans.factory.annotation.Autowired; public class Customer { //即將自動裝配的屬性 private Person person; private String type; @Autowired public Customer(Person person) { this.person = person; } //getter and setter methods //toString methods }
Person類
package com.main.autowrite.autowired.annotation;
public class Person {
private String name;
private int age;
//getter and setter methods
//toString methods
}
第二步:修改beans.xml配置檔案
說明:這裡存在了兩個person bean,一個是person1,一個是person2
<!--?xml version="1.0" encoding="UTF-8"?--> <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.xsd"> <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"> <bean class="com.main.autowrite.autowired.annotation.Customer" id="customer"> <property name="type" value="user"></property> </bean> <bean class="com.main.autowrite.autowired.annotation.Person" id="person1"> <property name="name" value="jack"> <property name="age" value="18"> </property></property></bean> <bean class="com.main.autowrite.autowired.annotation.Person" id="person2"> <property name="name" value="tom"> <property name="age" value="28"> </property></property></bean> </bean></beans>
第三步:編寫測試程式碼
@Test
public void test(){
ApplicationContext context =
new ClassPathXmlApplicationContext("com/main/autowrite/autowired/annotation/beans.xml");
Customer customer = (Customer)context.getBean("customer");
System.out.print(customer.toString());
}
測試結果如下:(丟擲異常)
這是因為Customer在進行自動裝配時,不清楚要裝載person1,還是要裝載person2,這時我們就應該使用@Qualifier
這是因為Customer在進行自動裝配時,不清楚要裝載person1,還是要裝載person2,這時我們就應該使用@Qualifier註解來告訴它,我們想要的是哪一個!
為解決上述問題,這裡引入@Qualifier註解
@Qualifier示例
修改你的Customer類如下:
package com.main.autowrite.autowired.annotation;
import java.lang.annotation.Retention;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
public class Customer {
//即將自動裝配的屬性
@Autowired
@Qualifier("person2")
private Person person;
private String type;
//getter and setter methods
//toString methods
}
修改你的beans.xml配置檔案如下:此時應該將引入spring上下文以及context:annotation-config標籤
<!--?xml version="1.0" encoding="UTF-8"?-->
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" 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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config>
<bean class="com.main.autowrite.autowired.annotation.Customer" id="customer">
<property name="type" value="user"></property>
</bean>
<bean class="com.main.autowrite.autowired.annotation.Person" id="person1">
<property name="name" value="jack">
<property name="age" value="18">
</property></property></bean>
<bean class="com.main.autowrite.autowired.annotation.Person" id="person2">
<property name="name" value="tom">
<property name="age" value="28">
</property></property></bean>
</context:annotation-config></beans>
此時Customer bean將會自動裝配person2 bean
執行結果如下: