Bean作用域(Bean Scope)
- singleton【單例模式】【預設】:全域性唯一
<!--顯式設定單例模式-->
<bean id="accountService" class="com.something.DefaultAccountService" scope="singleton"/>
- prototype【原型模式】:每個物件都有自己的bean
<bean id="accountService" class="com.something.DefaultAccountService" scope="prototype"/>
request、session、application均只在web開發中使用到
Bean自動裝配
- 自動裝配:Spring滿足Bean依賴的一種方式
- Spring會在上下文中自動尋找並自動給bean裝配屬性
Spring中的三種裝配方式
- xml中顯式的配置
- java中顯式的配置
- 隱式的自動裝配【重點】
測試
- 搭建環境
- 新的普通Maven專案
- 編寫實體類【一人有一貓一狗】
/**
* @author Iris 2021/8/11
*/
public class Cat {
public void shout() {
System.out.println("Miao");
}
}
public class Dog {
public void shout() {
System.out.println("Wang");
}
}
public class Human {
private Dog dog;
private Cat cat;
private String name;
Setter&Getter
toString();
}
ByName自動裝配實現
<!--
byName:會自動在容器上下文中查詢,自己物件set方法後的值對應的bean-id
-->
<bean class="cn.iris.pojo.Human" id="human" autowire="byName">
<property name="name" value="iris"/>
</bean>
ByType自動裝配實現
<!--
byName:會自動在容器上下文中查詢,自己物件屬性型別相同的bean
-->
<bean class="cn.iris.pojo.Human" id="human" autowire="byType">
<property name="name" value="iris"/>
</bean>
注意點
- byName自動裝配時,id需與set方法後的值相同且唯一
- byType自動裝配時,需保證屬性type唯一
註解實現自動裝配
【註解開發不一定比xml配置更好,取決於使用者和使用情況】
使用註解步驟:
- 匯入約束
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
</beans>
- 配置註解的支援【手動高亮】
<context:annotation-config/>
@Autowired
- Autowired預設注入為byType,當同種型別數目>1時,再根據byName匹配注入
- 【類屬性/set方法】上使用即可
- 使用後可不寫set方法,前提:自動裝配的屬性在IoC容器中存在且符合byName
- require(boolean)
- false:顯式設定false說明該物件可為null;
- true:物件不可為空
@Autowired
private Dog dog;
@Autowired
private Cat cat;
@Nullable
- 被標記欄位可為null
@Qualifier
- 新增物件id
@Resource
- 預設byName匹配注入