天天看點

spring中間scope詳細解釋0.思維導圖1. scope概論2. scope曆史及分類 3.單個scope具體解釋4.scope配置

spring中間scope詳細解釋0.思維導圖1. scope概論2. scope曆史及分類 3.單個scope具體解釋4.scope配置

spring中scope是一個很關鍵的概念。簡單說就是對象在spring容器(IOC容器)中的生命周期,也能夠了解為對象在spring容器中的建立方式。

眼下。scope的取值有5種取值:

在Spring 2.0之前。有singleton和prototype兩種;

在Spring 2.0之後,為支援web應用的ApplicationContext,增強另外三種:request。session和global session類型。它們僅僅有用于web程式,一般是和XmlWebApplicationContext共同使用。

 此取值時表明容器中建立時僅僅存在一個執行個體,全部引用此bean都是單一執行個體。

如同每一個國家都有一個總統。國家的全部人共用此總統,而這個國家就是一個spring容器,總統就是spring建立的類的bean,國家中的人就是其他調用者。總統是一個表明其在spring中的scope為singleton。也就是單例模型。

此外。singleton類型的bean定義從容器啟動到第一次被請求而執行個體化開始。僅僅要容器不銷毀或退出。該類型的bean的單一執行個體就會一直存活,典型單例模式。如同servlet在web容器中的生命周期。

spring容器在進行輸出prototype的bean對象時,會每次都又一次生成一個新的對象給請求方,盡管這樣的類型的對象的執行個體化以及屬性設定等工作都是由容器負責的。可是僅僅要準備完成。而且對象執行個體傳回給請求方之後,容器就不在擁有目前對象的引用,請求方須要自己負責目前對象後繼生命周期的管理工作,包含該對象的銷毀。也就是說,容器每次傳回請求方該對象的一個新的執行個體之後,就由這個對象“自生自滅”。最典型的展現就是spring與struts2進行整合時,要把action的scope改為prototype。

如同分蘋果,将蘋果的bean的scope屬性聲明為prototype,在每一個人領取蘋果的時候。我們都是發一個新的蘋果給他,發完之後,别人愛怎麼吃就怎麼吃,愛什麼時候吃什麼時候吃,可是注意吃完要把蘋果核扔到垃圾箱!對于那些不能共享使用的對象類型,應該将其定義的scope設為prototype。

再次說明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的一種特例,除了場景更加詳細之外,語意上差點兒相同。

對于web應用來說,放到session中最普遍的就是使用者的登入資訊,對于這樣的放到session中的資訊。我們能夠使用例如以下形式的制定scope為session:

<bean id ="userPreferences" class="...UserPreferences"   scope="session" />

Spring容器會為每一個獨立的session建立屬于自己的全新的UserPreferences執行個體,比request scope的bean會存活更長的時間,其它的方面沒差别,假設java web中session的生命周期。

<bean id ="userPreferences" class="...UserPreferences"   scope="globalsession" />

global session僅僅有應用在基于porlet的web應用程式中才有意義。它映射到porlet的global範圍的session,假設普通的servlet的web 應用中使用了這個scope。容器會把它作為普通的session的scope對待。

進行bean的配置時,指定scope。

spring中間scope詳細解釋0.思維導圖1. scope概論2. scope曆史及分類 3.單個scope具體解釋4.scope配置
spring中間scope詳細解釋0.思維導圖1. scope概論2. scope曆史及分類 3.單個scope具體解釋4.scope配置

前提為配置spring為注解配置。

spring中間scope詳細解釋0.思維導圖1. scope概論2. scope曆史及分類 3.單個scope具體解釋4.scope配置
spring中間scope詳細解釋0.思維導圖1. scope概論2. scope曆史及分類 3.單個scope具體解釋4.scope配置

版權聲明:本文部落格原創文章,部落格,未經同意,不得轉載。

本文轉自mfrbuaa部落格園部落格,原文連結:http://www.cnblogs.com/mfrbuaa/p/4680053.html,如需轉載請自行聯系原作者