《Spring》(六)---- Bean的scope

Claire_ljy發表於2020-04-04
  • Bean的scope

  配置中的bean定義可以看作是一個模板,容器會根據這個模板來構造物件,但是要根據這個模板構造多少個物件,又該讓這些構造完的物件例項存活多久,則由容器的scope定義。scope用來宣告容器中的物件所應該處的限定場景或者說該物件的存活時間,即容器在物件進入其相應的scope之前,生成並裝配這些物件,在該物件不再處於這些scope的限定之後,容器通常會銷燬這些物件。

  Spring容器提供了五種scope型別,singleton,prototype, request, session,global session(後邊三種職能在web應用中使用)

 

  1. singleton

  標記為擁有singleton scope的物件定義,在IoC容器中只存在一個例項,所有對該物件的引用將共享這個例項,該例項從容器啟動,並因為第一次被請求而初始化之後,將一直存活到容器退出,它與IoC容器幾乎擁有相同的壽命。

  通常情況下,如果不指定bean的scope,singleton便是容器預設的scope.

 

  2. prototype

  針對宣告為擁有prototype scope的bean定義,容器在接到該型別物件的請求的時候,會每次都重新生成一個新的物件例項給請求方。物件例項返回給請求方之後,容器就不再擁有當前返回物件的引用了,請求放需要自己負責當前返回物件的後繼生命週期的管理工作,包括物件的銷燬。

  對於那些請求方不能共享使用的物件型別,應該將其bean定義的scope設定為prototype。這些物件一般都是一些有狀態的,比如儲存每個顧客資訊的物件。

 

  3. request, session, global session

這三個通常與XMLWebApplicationContext共同使用。

    a. request

  Spring容器會為每個HTTP請求建立一個全新的Request-Processor物件供當前請求使用,當請求結束後,該物件例項的生命週期即告結束。從不很嚴格的意義上說,request可以看作prototype的一種特例,除了場景更加具體外,語義差不多。

    b. session

  對於Web應用來說,放到session中的最普遍的資訊就是使用者的登陸資訊。Spring容器會為每個獨立的session建立屬於它們自己的全新的物件例項。與request相比,除了bean的存活時間長了一點外,其他方面沒什麼差別。

    c. global session

  global session只有應用在基於portlet的Web應用程式中才有意義,它對映到portlet的global範圍的session。如果在普通的基於servlet的Web應用中使用了global session, 容器會將其作為普通session的scope來對待。

轉載於:https://www.cnblogs.com/IvySue/p/6480210.html

相關文章