春天有应用范围吗?

Sha*_*thi 8 java spring spring-mvc application-scope

我在下面的博客中看到了"应用程序"范围.这是真的吗?

http://www.concretepage.com/spring/spring-bean-scope-example-using-scope-annotation-and-xml-for-singleton-prototype-request-session-global-session-and-application-scope-与范围的代理

因为,根据我的冲浪,我知道spring只有5个以下的范围.如果我错了,请纠正我.

  1. 独生子
  2. 原型
  3. 请求
  4. 会议
  5. 全球会议

Pau*_*Pau 13

官方文档中有一节与bean范围有关:

基本上,他们定义下一个:

singleton(默认)将每个Spring IoC容器的单个bean定义范围限定为单个对象实例.

prototype 将单个bean定义范围限定为任意数量的对象实例.

request 将单个bean定义范围限定为单个HTTP请求的生命周期; 也就是说,每个HTTP请求都有自己的bean实例,它是在单个bean定义的后面创建的.仅在Web感知Spring ApplicationContext的上下文中有效.

session 将单个bean定义范围限定为HTTP会话的生命周期.仅在Web感知Spring ApplicationContext的上下文中有效.

globalSession 将单个bean定义范围限定为全局HTTP会话的生命周期.通常仅在Portlet上下文中使用时有效.仅在Web感知Spring ApplicationContext的上下文中有效.

application 将单个bean定义范围限定为ServletContext的生命周期.仅在Web感知Spring ApplicationContext的上下文中有效.

websocket 将单个bean定义范围限定为WebSocket的生命周期.仅在Web感知Spring ApplicationContext的上下文中有效.


此外,由于Spring 3.0存在其他作用域 线程范围,但默认情况下未注册,而且您甚至可以创建自己的作用域:

从Spring 3.0开始,线程范围可用,但默认情况下未注册.有关更多信息,请参阅SimpleThreadScope的文档.有关如何注册此自定义范围或任何其他自定义范围的说明,请参阅"使用自定义范围"一节.

有一节介绍如何定义自定义范围:


尊重Application scope,他们将其定义为下一个:

Spring容器通过对整个Web应用程序使用appPreferences bean定义一次来创建AppPreferences bean的新实例.也就是说,appPreferences bean的作用域是ServletContext级别,存储为常规的ServletContext属性.

它还解释了Spring单例bean之间的区别:

这有点类似于Spring单例bean,但在两个重要方面有所不同:它是每个ServletContext的单例,而不是每个Spring的'ApplicationContext'(在任何给定的Web应用程序中可能有几个),它实际上是暴露的,因此作为ServletContext属性可见

因此,如果您希望使用XML:

<bean id="apps" class="com.App" scope="application"/>
Run Code Online (Sandbox Code Playgroud)

或注释:

@ApplicationScope
@Component
public class App {
    // ...
}
Run Code Online (Sandbox Code Playgroud)