c ioc 單例模式 IOC的單例和多例

2021-10-12 15:57:45 字數 1352 閱讀 1538

spring容器在預設情況下管理的bean是單例(singleton)的,即該bean只會創造乙個物件,無論之後呼叫多少次該bean,都只會返回同乙個物件。

多例(prototype)模式,每次呼叫同乙個bean,都會創造不同的物件。

實驗:兩個實驗類:

packagecom.tsvv.pojo;public classorange {

">

test:

@testpublic voidtestscope() {

orange orange1=(orange)context.getbean("orange");

orange orange2=(orange)context.getbean("orange");

orange orange3=(orange)context.getbean("orange");

system.out.println("orange1----->"+orange1);

system.out.println("orange2----->"+orange2);

system.out.println("orange3----->"+orange3);

結果:orange1----->com.tsvv.pojo.orange@363ee3a2

orange2----->com.tsvv.pojo.orange@4690b489

orange3----->com.tsvv.pojo.orange@79b06cab

區別與聯絡:

單例模式和多例模式屬於物件模式,但是單例模式的物件在整個系統中只有乙份,多例模式可以有多個例項;它們都不對外提供構造方法,即構造方法都為私有。

之所以用單例,是因為沒必要每個請求都新建乙個物件,這樣子既浪費cpu又浪費記憶體;

之所以用多例,是為了防止併發問題:即乙個請求改變了物件的狀態,此時物件又處理另乙個請求,而之前請求對物件狀態的改變導致了物件對另乙個請求做了錯誤的處理;

用單例和多例的標準只有乙個:當物件含有可改變的狀態時(更精確的說就是在實際應用中該狀態會改變),則多例,否則單例;

生命週期:

單例:bean在單例模式下,ioc容器啟動時解析xml發現該bean標籤後,直接建立該bean的物件存入內部map中儲存,此後無論呼叫多少次getbean()獲取該bean都是從map中獲取該物件返回,一直是乙個物件。此物件一直被ioc容器持有,直到容器退出時,隨著容器的退出物件被銷毀。

多例:bean在多例模式下,ioc容器啟動時解析xml發現該bean標籤後,只是將該bean進行管理,並不會建立物件,此後每次使用 getbean()獲取該bean時,ioc都會重新建立該物件返回,每次都是乙個新的物件。這個物件ioc容器並不會持有,何時銷毀取決於使用該物件的使用者自己什麼時候銷毀該物件。

單例 單例模式

簡單的實現乙個單例 instancetype sharedinstance return instance 真正的單例模式 myclass sharedinstance return instance id allocwithzone nszone zone return nil id copywi...

單例模式 單例模式

餓漢式 急切例項化 public class eagersingleton 2.宣告靜態成員變數並賦初始值 類初始化的時候靜態變數就被載入,因此叫做餓漢式 public static eagersingleton eagersingleton new eagersingleton 3.對外暴露公共的...

懶漢單例模式 和 餓漢單例模式

單例模式 是一種常用的軟體設計模式,在它的核心結構中值包含乙個被稱為單例的特殊類。乙個類只有乙個例項,即乙個類只有乙個物件例項。餓漢單例模式 public class singletondemo5 private singletondemo5 public static final singleto...