spring bean scope 的幾種型別

2021-07-02 17:32:27 字數 1063 閱讀 4034

spring容器最初提供了兩種bean的scope型別:singleton和prototype,但發布2.0以後,又引入了另外三種scope型別:request、session和global session,這三種只能在web 應用中才可以使用。

singleton: spring 容器只會建立該bean定義的唯一例項,這個例項會被儲存到快取中,並且對該bean的所有後續請求和引用都將返回該快取中的物件例項,一般情況下,無狀態的bean使用該scope。

prototype:每次對該bean的請求都會建立乙個新的例項,一般情況下,有狀態的bean使用該scope。

request:每次http請求將會有各自的bean例項,類似於prototype。

session:在乙個http session中,乙個bean定義對應乙個bean例項。

global session:在乙個全域性的http session中,乙個bean定義對應乙個bean例項。典型情況下,僅在使用portlet context的時候有效。

其次說明spring的預設scope(bean作用域)是singleton

在者解釋下有狀態的bean和無狀態的bean(以session bean為例)

有狀態和無狀態會話bean的本質區別是它們的生命期。

首先解釋乙個下面要用到的概念--使用者:session bean 的使用者實際上就是直接呼叫ejb的類的例項,甚至是這個例項的某個方法。同乙個類的不同例項對於session bean 來說是不同的使用者。

有狀態會話bean :每個使用者有自己特有的乙個例項,在使用者的生存期內,bean保持了使用者的資訊,即「有狀態」;一旦使用者滅亡(呼叫結束或例項結束),bean的生命期也告結束。即每個使用者最初都會得到乙個初始的bean。

無狀態會話bean :bean一旦例項化就被加進會話池中,各個使用者都可以共用。即使使用者已經消亡,bean 的生命期也不一定結束,它可能依然存在於會話池中,供其他使用者呼叫。由於沒有特定的使用者,那麼也就不能保持某一使用者的狀態,所以叫無狀態bean。但無狀態會話bean 並非沒有狀態,如果它有自己的屬性(變數),那麼這些變數就會受到所有呼叫它的使用者的影響,這是在實際應用中必須注意的。

詳細見

多型的幾種型別

總體是分為通用多型和專用多型 通用多型 不同的型別值,執行相同的 專用多型 不同的型別值,執行不同的 類似列舉 什麼型別,執行什麼操作 通用多型分為 引數多型和包含多型 引數多型 參考c 中的template 靜態聯編時候實現 包含多型 可以理解為abstract functions,inte ce...

多型的幾種型別

總體是分為通用多型和專用多型 通用多型 不同的型別值,執行相同的 專用多型 不同的型別值,執行不同的 類似列舉 什麼型別,執行什麼操作 通用多型分為 引數多型和包含多型 引數多型 參考c 中的template 靜態聯編時候實現 包含多型 可以理解為abstract functions,inte ce...

幾種類載入方式的區別

虛擬機器載入類的途徑 1 dog dog new dog 這個動作會導致常量池的解析,dog類被隱式裝載。如果當前classloader無法找到dog,則丟擲noclassdeffounderror。2 class clazz class.forname dog object dog clazz.n...