2017-06-05 58 views
6

我在下面的博客中看到了'應用'範圍。這是真的嗎?春季有應用範圍嗎?

http://www.concretepage.com/spring/spring-bean-scope-example-using-scope-annotation-and-xml-for-singleton-prototype-request-session-global-session-and-application-scope-with-scoped-proxy

因爲,按我的衝浪,我才知道春天只有以下5範圍。如果我錯了,請糾正我。

  1. 辛格爾頓
  2. 原型
  3. 請求
  4. 會議
  5. 全局會話
+0

所以這將是應用範圍和辛格爾頓範圍之間的區別? –

回答

9

有官方文檔的一部分,其相關Bean的作用:

基本上,他們定義下一個:

singleton(默認)每個Spring IoC容器將單個bean定義作用於單個對象實例。

原型 將單個bean的定義作用於任意數量的對象實例。

請求 作用域單個bean定義到單個HTTP請求的生命週期;也就是說,每個HTTP請求都有自己的實例,這個實例是在單個bean定義的背後創建的。只有在Web感知的Spring ApplicationContext的上下文中才有效。

會話 範圍HTTP會話生命週期的單個bean定義。只有在Web感知的Spring ApplicationContext的上下文中才有效。

globalSession 將全局HTTP會話生命週期中的單個bean定義作用域。通常僅在Portlet上下文中使用時纔有效。只有在Web感知的Spring ApplicationContext的上下文中才有效。

應用程序 作用域將ServletContext的生命週期定義爲單個bean。只有在Web感知的Spring ApplicationContext的上下文中才有效。

websocket 將WebSocket生命週期中的單個bean定義作用域。只有在Web感知的Spring ApplicationContext的上下文中才有效。


此外,隨着春季3.0存在的其他範圍線程範圍,但默認情況下未登記的,而且你甚至可以創建自己的範圍:

在Spring 3.0,一個線程範圍可用,但默認情況下未註冊 。有關更多信息,請參閱 SimpleThreadScope的文檔。有關如何註冊此自定義作用域或其他自定義作用域的說明,請參閱「使用自定義作用域」一節。

有是說明了如何定義您的自定義範圍部分:


對於Application scope,他們將它定義爲下一個:

Spring容器創建AppPreferences bean 的新實例,通過對整個web 應用程序使用appPreferences bean定義一次。也就是說,appPreferences bean的作用域爲 ServletContext級別,作爲常規的ServletContext屬性存儲。

這也解釋了一個Spring單例的bean之間的區別:

這有點類似於彈簧單豆,但有兩種 重要的方面不同:它是每ServletContext的一單,不是每個春天 「的ApplicationContext」(對於其有可能在任何給定的網絡應用 幾個),和它實際上暴露,並因此作爲 ServletContext屬性

可見

所以,如果你正在尋找與XML的使用方法:

<bean id="apps" class="com.App" scope="application"/> 

或註釋:

@ApplicationScope 
@Component 
public class App { 
    // ... 
}