春季有应用范围吗?

2022-09-04 08:28:55

我在以下博客中看到了“应用程序”范围。是真的吗?

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. 全球会议

答案 1

官方文档上有一个与bean范围相关的部分:

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

单例(默认)将单个 Bean 定义的作用域限定为每个 Spring IoC 容器的单个对象实例。

原型将单个 Bean 定义的作用域限定为任意数量的对象实例。

请求将单个 Bean 定义的作用域限定为单个 HTTP 请求的生命周期;也就是说,每个HTTP请求都有自己的Bean实例,该实例是在单个Bean定义的基础上创建的。仅在 Web 感知的 Spring ApplicationContext 的上下文中有效。

会期将单个 Bean 定义的作用域限定为 HTTP 会话的生命周期。仅在 Web 感知的 Spring ApplicationContext 的上下文中有效。

全局会话将单个 Bean 定义的作用域限定为全局 HTTP 会话的生命周期。通常仅在 Portlet 上下文中使用时才有效。仅在 Web 感知的 Spring ApplicationContext 的上下文中有效。

应用将单个 Bean 定义的作用域限定为 ServletContext 的生命周期。仅在 Web 感知的 Spring ApplicationContext 的上下文中有效。

网络袜子将单个 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单例豆之间的区别:

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

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

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

或注释:

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

答案 2

应用将单个 Bean 定义的作用域限定为 ServletContext 的生命周期。仅在 Web 感知的 Spring ApplicationContext 的上下文中有效。

点击链接了解更多详情:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-factory-scopes


推荐