目錄
- 前提
- 1、byName
- 2、byType
- 3、使用注解進行自動裝配
- (1)spring組態檔設定約束
- (2)開啟屬性注解支持
- (3)@Autowired
- (4)@Qualifier
- (5)@Resource
前提
public class Cat {
public void shout() {
System.out.println("miao~");
}
}
public class Dog {
public void shout() {
System.out.println("wang~");
}
}
public class User {
private Cat cat;
private Dog dog;
private String str;
}
<?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 id="dog" />
<bean id="cat" />
<bean id="user" >
<property name="cat" ref="cat"/>
<property name="dog" ref="dog"/>
<property name="str" value="https://www.cnblogs.com/workhah/p/workhah"/>
</bean>
1、byName
autowire byName (按名稱自動裝配)
<bean id="user" autowire="byName">
<property name="str" value="https://www.cnblogs.com/workhah/p/workhah"/>
</bean>
一個bean節點帶有 byName的屬性時:
- 將查找其類中所有的set方法名,例如setCat,獲得將set去掉并且首字母小寫的字串,即cat,
- 去spring容器中尋找是否有此字串名稱id的物件,
- 如果有,就取出注入;如果沒有,就報空指標例外,
2、byType
autowire byType (按型別自動裝配)
<bean id="dog" />
<bean id="cat" />
<bean id="cat2" />
<bean id="user" autowire="byType">
<property name="str" value="https://www.cnblogs.com/workhah/p/workhah"/>
</bean>
同一型別的物件,在spring容器中唯一,如果不唯一,會報不唯一的例外,
3、使用注解進行自動裝配
(1)spring組態檔設定約束
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
</beans>
(2)開啟屬性注解支持
<context:annotation-config/>
(3)@Autowired
@Autowired是按型別自動轉配的,不支持id匹配,
@Autowired(required=false) 說明:false,物件可以為null;true,物件必須存物件,不能為null,
public class User {
// 自動裝配省略了setter
@Autowired
private Cat cat;
@Autowired
private Dog dog;
private String str;
public Cat getCat() {
return cat;
}
public Dog getDog() {
return dog;
}
public String getStr() {
return str;
}
}
(4)@Qualifier
- @Autowired是根據型別自動裝配的,加上@Qualifier則可以根據byName的方式自動裝配
- @Qualifier不能單獨使用,
<bean id="dog1" />
<bean id="dog2" />
<bean id="cat1" />
<bean id="cat2" />
@Autowired
@Qualifier(value = "https://www.cnblogs.com/workhah/p/cat2")
private Cat cat;
@Autowired
@Qualifier(value = "https://www.cnblogs.com/workhah/p/dog2")
private Dog dog;
(5)@Resource
- @Resource如有指定的name屬性,先按該屬性進行byName方式查找裝配;
- 其次再進行默認的byName方式進行裝配;
- 如果以上都不成功,則按byType的方式自動裝配,
- 都不成功,則報例外,
public class User {
//如果允許物件為null,設定required = false,默認為true
@Resource(name = "cat2")
private Cat cat;
@Resource
private Dog dog;
private String str;
}
<bean id="dog" />
<bean id="cat1" />
<bean id="cat2" />
<bean id="user" />
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/353109.html
標籤:Java
上一篇:資料庫設計的 10 個最佳實踐!
