<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Scope,也稱作用域,在 Spring IoC 容器是指其建立的 Bean 物件相對於其他 Bean 物件的請求可見範圍。
在 Spring IoC 容器中具有以下幾種作用域:
就必須在組態檔中指明,設定方式如下(以 xml 組態檔為例):
<!-- 具體的作用域需要在 scope 屬性中定義 --> <bean id="XXX" class="com.XXX.XXXXX" scope="XXXX" />
singleton
:單例模式,在整個Spring IoC容器中,使用singleton定義的Bean將只有一個範例prototype
:原型模式,每次通過容器的getBean方法獲取prototype定義的Bean時,都將產生一個新的Bean範例request
:對於每次HTTP請求,使用request定義的Bean都將產生一個新範例,即每次HTTP請求將會產生不同的Bean範例。只有在Web應用中使用Spring時,該作用域才有效session
:對於每次HTTP Session,使用session定義的Bean都將產生一個新範例。同樣只有在Web應用中使用Spring時,該作用域才有效globalsession
:每個全域性的HTTP Session,使用session定義的Bean都將產生一個新範例。典型情況下,僅在使用portlet context的時候有效。同樣只有在Web應用中使用Spring時,該作用域才有效其中比較常用的是singleton和prototype兩種作用域。
對於singleton作用域的Bean,每次請求該Bean都將獲得相同的範例。容器負責跟蹤Bean範例的狀態,負責維護Bean範例的生命週期行為;如果一個Bean被設定成prototype作用域,程式每次請求該id的Bean,Spring都會新建一個Bean範例,然後返回給程式。在這種情況下,Spring容器僅僅使用new 關鍵字建立Bean範例,一旦建立成功,容器不在跟蹤範例,也不會維護Bean範例的狀態。
如果不指定Bean的作用域,Spring預設使用singleton作用域。Java在建立Java範例時,需要進行記憶體申請;銷燬範例時,需要完成垃圾回收,這些工作都會導致系統開銷的增加。因此,prototype作用域Bean的建立、銷燬代價比較大。而singleton作用域的Bean範例一旦建立成功,可以重複使用。因此,除非必要,否則儘量避免將Bean被設定成prototype作用域。
@scope完成bean的作用域設定預設是單例模式(singleton)如果需要設定的話可以修改對應值與以上提到的一致例如:@scope(“prototype”)
思維導圖
spring中scope是一個非常關鍵的概念,簡單說就是物件在spring容器(IOC容器)中的生命週期,也可以理解為物件在spring容器中的建立方式。
目前,scope的取值有5種取值:
在Spring 2.0之前,有singleton和prototype兩種;
在Spring 2.0之後,為支援web應用的ApplicationContext,增強另外三種:request,session和global session型別,它們只實用於web程式,通常是和XmlWebApplicationContext共同使用。
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對待。
1)xml方式
進行bean的設定時,指定scope。
2)註解方式
前提為設定spring為註解設定。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45