spring中的scope詳解,springscope詳解
0.思維導圖
1. scope概論
spring中scope是一個非常關鍵的概念,簡單說就是對象在spring容器(IOC容器)中的生命週期,也可以理解為對象在spring容器中的建立方式。
2.
scope曆史及分類
目前,scope的取值有5種取值:
在Spring 2.0之前,有singleton和prototype兩種;
在Spring 2.0之後,為支援web應用的ApplicationContext,增強另外三種:request,session和global session類型,它們只實用於web程式,通常是和XmlWebApplicationContext共同使用。
3.單個scope詳解
1)singleton (單一執行個體)
此取值時表明容器中建立時只存在一個執行個體,所有引用此bean都是單一執行個體。如同每個國家都有一個總統,國家的所有人共用此總統,而這個國家就是一個spring容器,總統就是spring建立的類的bean,國家中的人就是其它調用者,總統是一個表明其在spring中的scope為singleton,也就是單例模型。
此外,singleton類型的bean定義從容器啟動到第一次被請求而執行個體化開始,只要容器不銷毀或退出,該類型的bean的單一執行個體就會一直存活,典型單例模式,如同servlet在web容器中的生命週期。
2)prototype
spring容器在進行輸出prototype的bean對象時,會每次都重建一個新的對象給請求方,雖然這種類型的對象的執行個體化以及屬性設定等工作都是由容器負責的,但是只要準備完畢,並且對象執行個體返回給請求方之後,容器就不在擁有當前對象的引用,請求方需要自己負責當前對象後繼生命週期的管理工作,包括該對象的銷毀。也就是說,容器每次返回請求方該對象的一個新的執行個體之後,就由這個對象“自生自滅”,最典型的體現就是spring與struts2進行整合時,要把action的scope改為prototype。
如同分蘋果,將蘋果的bean的scope屬性聲明為prototype,在每個人領取蘋果的時候,我們都是發一個新的蘋果給他,發完之後,別人愛怎麼吃就怎麼吃,愛什麼時候吃什麼時候吃,但是注意吃完要把蘋果核扔到垃圾箱!對於那些不能共用使用的物件類型,應該將其定義的scope設為prototype。
3)request再次說明request,session和global session類型只實用於web程式,通常是和XmlWebApplicationContext共同使用。
<bean id ="requestPrecessor" class="...RequestPrecessor" scope="request" />
Spring容器,即XmlWebApplicationContext 會為每個HTTP請求建立一個全新的RequestPrecessor對象,當請求結束後,該對象的生命週期即告結束,如同java web中request的生命週期。當同時有100個HTTP請求進來的時候,容器會分別針對這10個請求建立10個全新的RequestPrecessor執行個體,且他們相互之間互不干擾,簡單來講,request可以看做prototype的一種特例,除了情境更加具體之外,語意上差不多。
4)session
對於web應用來說,放到session中最普遍的就是使用者的登入資訊,對於這种放到session中的資訊,我們可以使用如下形式的制定scope為session:
<bean id ="userPreferences" class="...UserPreferences" scope="session" />
Spring容器會為每個獨立的session建立屬於自己的全新的UserPreferences執行個體,比request scope的bean會存活更長的時間,其他的方面沒區別,如果java web中session的生命週期。
5)global session
<bean id ="userPreferences" class="...UserPreferences" scope="globalsession" />
global session只有應用在基於porlet的web應用程式中才有意義,它映射到porlet的global範圍的session,如果普通的servlet的web 應用中使用了這個scope,容器會把它作為普通的session的scope對待。
4.scope配置
1)xml方式進行bean的配置時,指定scope。
2)註解方式前提為配置spring為註解配置。
Spring架構註解裡面@Scope什意思
@Scope 簡單點說就是用來指定bean的範圍(官方解釋:scope用來聲明IOC容器中的對象應該處的限定情境或者說該對象的存活空間,即在IOC容器在對象進入相應的scope之前,產生並裝配這些對象,在該對象不再處於這些scope的限定之後,容器通常會銷毀這些對象),其預設範圍是"singleton",如果要換成其他作用地區,直接後面添加類型即可,比如@Scope("prototype") ,注意spring2.0後 又增加了request ,session和global session 4個作用地區,希望對你有協助。
Spring預設的Bean的scope是什
很多容器中都有Scope這個詞,它代表變數的範圍的意思,它一般包括四種範圍,包括request,context,session,application等,每個範圍都有特定的時間和請求有效限制,
再細查下吧~