4.惡漢/懶漢
5.bean例項物件的銷毀
6.@scope註解的使用場景
@scope註解是 spring ioc 容器中的乙個作用域
,在 spring ioc 容器中,他用來配置bean例項的作用域物件。@scope 具有以下幾種作用域:
singleton 單例項的(單例
)(預設) ----全域性有且僅有乙個例項prototype 多例項的(多例
) ---- 每次獲取bean的時候會有乙個新的例項reqeust 同一次請求 ----request:每一次http請求都會產生乙個新的bean,同時該bean僅在當前http request
內有效session 同乙個會話級別 ---- session:每一次http請求都會產生乙個新的bean,同時該bean僅在當前http session
內有效注:這邊只演示我們常用的 singleton、prototype 兩種,其他的可以自己試試
直接在bean物件方法上增加@scope註解即可。
① 在不指定@scope的情況下,所有的bean都是單例項的bean,而且是餓漢
模式載入(容器啟動例項就建立好了)
@bean
public person person()
②指定@scope為prototype
表示為多例項的,而且還是懶漢
模式載入(ioc容器啟動的時候,並不會建立物件,而是 在第一次使用的時候才會建立)
@bean
@scope
(value =
"prototype"
)public person person()
/**
* person類
*/public
class
person
}
/**
* todo 主配置類
* * @author : lzb
* @date: 2021-03-05 13:50
*/@configuration
public
class
beanconfig
}
@scope註解預設為singleton
單例,singleton例項的意思不管你使用多少次在springioc容器中只會存在乙個例項,演示如下只列印了一次建立例項:
public
class
}
執行結果:
可以發現singleton單例模式,在ioc容器中只會有乙個例項存在,每次getbean()獲取的例項物件都是同乙個。
/**
* todo 主配置類
* * @author : lzb
* @date: 2021-03-05 13:50
*/@configuration
public
class
beanconfig
}
執行結果:
發現prototype多例模式,每次在呼叫getbean() 獲取例項時,都會重新呼叫 person 類的無參構造方法,重新建立乙個 person 物件。
使用singleton單例,採用餓漢載入(容器啟動,bean例項就建立好了)
使用prototype多例,採用懶漢載入(ioc容器啟動的時候,並不會建立物件例項,而是在第一次使用的時候才會建立)
/**
* todo 主配置類
* * @author : lzb
* @date: 2021-03-05 13:50
*/@configuration
public
class
beanconfig
}
public
class
}
執行結果:
singleton單例模式,在 ioc 容器啟動時,便會去呼叫 person 類的無參構造方法,建立乙個 person 物件。此時並沒有呼叫 getbean() 方法來獲取person 物件例項。所以singleton 採用的是 惡漢式 建立例項物件
注:如何將 singleton 單例模式的惡漢式
變更為懶漢式
,只需要再新增乙個 @lazy 註解即可。如下所示:
@configuration
public
class
beanconfig
}
/**
* todo 主配置類
* * @author : lzb
* @date: 2021-03-05 13:50
*/@configuration
public
class
beanconfig
}
public
class
}
執行結果:
prototype多例模式,在 ioc 容器啟動時,並不會去建立bean例項,只有在呼叫 getbean() 方法獲取person 物件時,才會去呼叫 person 類的無參構造方法,建立乙個 person 物件。所以 prototype 採用的是 懶漢式 建立例項物件
針對單例項bean的話,容器啟動的時候,bean的物件就建立了,而且容器銷毀的時候,也會呼叫bean的銷毀方法;
針對多例項bean的話,容器啟動的時候,bean是不會被建立的而是在獲取bean的時候被建立,而且bean的銷毀不受ioc容器的管理,是由gc來處理的
針對每乙個bean例項,都會有乙個initmethod() 和 destroymethod() 方法,我們可以在bean 類中自行定義,也可以使用 spring 預設提供的這兩個方法。
public
class
person
public
void
init()
public
void
destroy()
}
@configuration
public
class
beanconfig
}
singleton單例,在ioc容器銷毀時,就會呼叫 destroymethod() 方法來將 bean物件銷毀;prototype多例,它的bean例項物件則不受ioc容器的管理,最終由gc來銷毀。
幾乎90%以上的業務使用singleton單例就可以,所以 spring 預設的型別也是singleton,singleton雖然保證了全域性是乙個例項,對效能有所提高,但是如果例項中有非靜態變數時,會導致執行緒安全問題,共享資源的競爭。
當設定為prototype多例時:每次連線請求,都會生成乙個bean例項,也會導致乙個問題,當請求數越多,效能會降低,因為建立的例項,導致gc頻繁,gc時長增加。
博主寫作不易,加個關注唄
求關注、求點贊,加個關注不迷路 ヾ(◍°∇°◍)ノ゙
我不能保證所寫的內容都正確,但是可以保證不複製、不貼上。保證每一句話、每一行**都是親手敲過的,錯誤也請指出,望輕噴 thanks♪(・ω・)ノ
純css瀑布流布局示例詳細講解
這是我在做公司官網時候遇到的問題,ui設計圖樣式如下 問題分析 首先,看見這個ui設計圖 它呈左右兩列不規則分布,而且也能發現width寬度 heigth高度等都不相同。思路分析 毫無疑問,我們用簡單的div布局 css做的話是可以達到這樣的效果的,只是這樣很low,不靈活,而且需要反覆布局排版,量...
Python檔案的操作示例的詳細講解
檔案的讀寫稱為i o操作。操作原理 py檔案是用直譯器去執行,呼叫os作業系統的資源,去操作磁碟上的檔案。操作流程 在去操作乙個檔案的檔案的時候,首先開啟或者建立乙個檔案,進行讀或者寫。讀 從檔案拿到記憶體當中來 寫 把記憶體的檔案放入檔案中 最後進行關閉資源。內建函式 open 可以建立或者開啟乙...
hash表詳細講解及實現
雜湊表是種資料結構,它可以提供快速的插入操作和查詢操作。第一次接觸雜湊表時,它的優點多得讓人難以置信。不論雜湊表中有多少資料,插入和刪除 有時包括側除 只需要接近常量的時間即0 1 的時間級。實際上,這只需要幾條機器指令。對雜湊表的使用者一一人來說,這是一瞬間的事。雜湊表運算得非常快,在電腦程式中,...