DP狀態機
阿新 • • 發佈:2021-07-12
Bean
一、Bean 是啥
- bean 是物件,一個或多個不限定。
- bean 由 Spring 中一個叫 IOC 的東西管理。
- 我們的程式由一個個 bean 組成。
二、Bean 分為兩類
2.1、註冊 Bean
把你要例項化的物件轉換成一個 Bean,放在 IOC 容器中。
註解 註冊:
@Component
@Repository
@Controller
@Service
@Configuration
- ....
XML 註冊:
<bean id="beanId" class="com.xxx"/>
注意:
- 必須確保
beanId
是全域性唯一不然會報錯。 - 可以不設定
beanId
2.2、使用 Bean
即是把已經在 配置類 或者 xml 檔案中配置好的 Bean 拿來使用,完成屬性、方法的組裝。
- 通過
byType
(@Autowired
) 獲取 IOC 容器中的 Bean。 - 通過
byName
(@Resource
)獲取 IOC 容器中的 Bean。
三、Bean 作用域
-
單例模式(Spring 預設機制)
<bean id="..." class="..." scope="singleton"/>
-
原型模式:每次從容器中 get 的時候,都會產生一個新物件!
<bean id="..." class="..." scope="prototype"/>
-
Web 使用的作用域
-
request
:在一次請求中建立,建立完失效<bean id="..." class="..." scope="request"/>
-
session
:一直在 session 中活著<bean id="..." class="..." scope="session"/>
-
application
:在 全域性中活著
-
四、Bean 的自動裝配
自動裝配就是指 Spring 容器可以自動裝配(autowire)相互協作的 Bean 之間的關聯關係。
簡化就是:將一個 Bean 注入其它 Bean 的 Property 中。
在 Spring 中有三種裝配的方式
- 在 xml 中顯示的配置
- 在 java 中顯示配置
- 隱式 的自動裝配 bean
- 在 XML 檔案中使用
autowire
屬性即可。
- 在 XML 檔案中使用
4.1、XML 配置檔案裝配
實體類
public class People{
private Cat cat;
public People(){}
public People(Cat cat){
this.cat = cat;
}
public void setCat(Cat cat){
this.cat = cat;
}
public Cat getCat(){
return cat;
}
@Override
public String toString(){
return "People{cat="+
cat +
'}';
}
}
1、byName自動裝配
byName
:會自動在容器上下文中,查詢和 注入類中的set()
名相同的beanId
並注入。
<bean id="cat" class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People" autowire="byName"/>
- 注意:
- 被注入類的
beanId
可以隨便起,但必須和 注入類中的set()
名相同。
- 被注入類的
2、byType 自動裝配
byType
:會自動在容器上下文中,查詢和 注入類中的set()
引數名相同的 類名。
<bean class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People" autowire="byType"/>
- 注意:
- 必須保證 Spring 容器中類的 全限定名 唯一。
- 包名不一樣、類名一樣的話,
set()
引數型別是哪個就注入那個。
3、constructor 自動裝配
constructor
:會自動在容器上下文中,查詢和 注入類中的 有參構造器 引數型別
<bean class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People" autowire="constructor"/>
- 注意:
- 被注入屬性的 型別 和 個數必須 注入類中的 有參構造器 引數相同。
4.2、半註解實現自動裝配
1. @Resource
- 實體類
public class People {
@Resource
private Cat cat;
@Override
public String toString(){
return "People{" +
"cat=" + cat +
'}';
}
}
- xml 配置檔案
<bean id="cat" class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People"/>
2. @Autowired
- 實體類
public class People {
@Resource
private Cat cat;
@Override
public String toString(){
return "People{" +
"cat=" + cat +
'}';
}
}
- xml 配置檔案
<bean class="com.pojo.Cat"/>
<bean id="people" class="com.pojo.People"/>
- 同一個類在 Spring 容器中註冊兩次
- 一個有
beanId
一個沒有beanId
,自動裝配會報錯。 - 如果其中有一個
beanId
和 繫結註解的屬性名 一樣就可以。
- 一個有