天天看點

Spring-scope詳解

Spring中的scope配置

xml方式

Spring-scope詳解

注解方式

Spring-scope詳解

scope類型

  1. singleton(單一執行個體)

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

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

  2. prototype

    Spring 容器在進行輸出 prototype 的 bean 對象時,會每次都重新生成一個新的對象給請求方

  3. request

    request,session 和 global session 類型隻實用于 web 程式,通常是和 XmlWebApplicationContext 共同使用。

    xml<bean id ="requestPrecessor" class="...RequestPrecessor" scope="request" />

    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 對待。

參考文章:

https://www.cnblogs.com/liaojie970/p/8302749.html

繼續閱讀