Spring Bean 作用域
主要了解 singleton 和 prototype 就好了,他們分別使用 單例模式 和 原型模式
| 來源 | 說明 |
|---|---|
| singleton | 默認作用域,一個BeanFactory有且僅有一個實體(并不是在JVM行程里是唯一的) |
| prototype | 原型作用域,每次以來查找和依賴注入生成新的Bean物件 |
| request | 將Spring Bean存盤在ServletRequest背景關系中 |
| session | 將Spring Bean存盤在HttpSession中 |
| application | 將Spring Bean 存盤在ServletContext中 |
依賴查找: 比較 singleton 和 prototype 兩種作用域
結論: 使用依賴查找時,singleton會拿到相同的物件,prototype 會拿到不同的物件
首先我們將User物件通過 singleton 和prototype 兩種方式分別注入到容器中

我們三次拿到User物件,比較結果(比較name屬性)
觀察可以看到,使用 singleton 作用域拿到的是相同的物件,prototype 作用域拿到的是不同的物件


依賴注入 比較 singleton 和 prototype 兩種作用域
結論:singleton 作用域拿到的是相同的物件,prototype 作用域拿到的仍然是不同的物件
通過@Autowired方式依賴查找物件

把他們列印出來看看,這樣子會報錯,因為容器中有重復的物件,而我們沒有指定哪個是primary

如果我們使用 @Qualifier 注解指定要注入的物件名稱,就不會報錯了

輸出結果如下:可以看到,singleton 作用域拿到的是相同的物件,prototype 作用域拿到的仍然是不同的物件

依賴注入集合時 singleton 和 prototype 作用域的比較
結論:集合中會同時存在一份 singleton bean 和 prototype bean
使用@Autowired直接注入map集合

輸出,列印,可以看到 singleton 和 prototype 作用域的物件同時存在


singleton 和 prototype 作用域的生命周期方法的回呼情況
結論:
singleton 和 prototype 都會執行初始化方法回呼
但僅 singleton 會執行銷毀方法回呼
為了方便看到 beanName,User類實作了 BeanNameAware 介面,并定義了 初始化 和 銷毀方法,具體如下:

我們仍然使用依賴注入集合的方式同時拿到 singleton 和 prototype 作用域中的 User bean,并將他們輸出

輸出看看,可以看到 prototype bean 的銷毀方法并沒有被回呼

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/545099.html
標籤:其他
上一篇:張昌蒲 嚴教 卡牌計算器
下一篇:Binary &Op是什么
