在Spring框架中,Bean的作用域(Scope)定义了Bean实例的生命周期和可见范围。Spring支持以下几种常见的Bean作用域:
-
Singleton(默认):
- 单例作用域是Spring中默认的作用域。在单例模式下,容器中只存在一个Bean实例,该实例在容器启动时被创建,之后一直存在于整个应用程序的生命周期中。所有对该Bean的请求都返回同一个实例。
@Component public class MySingletonBean { // ... }
-
Prototype:
- 原型作用域表示每次请求都会创建一个新的Bean实例。每次调用
getBean()
方法或注入依赖时,都会返回一个新的Bean实例。
@Component @Scope("prototype") public class MyPrototypeBean { // ... }
- 原型作用域表示每次请求都会创建一个新的Bean实例。每次调用
-
Request:
- 请求作用域仅在Web应用程序中有效,表示每个HTTP请求都会创建一个新的Bean实例。该Bean实例仅在当前HTTP请求范围内有效。
@Component @Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS) public class MyRequestScopedBean { // ... }
-
Session:
- 会话作用域也仅在Web应用程序中有效,表示每个HTTP会话都会创建一个新的Bean实例。该Bean实例在整个HTTP会话期间都是有效的。
@Component @Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS) public class MySessionScopedBean { // ... }
-
GlobalSession:
- 全局会话作用域是在分布式环境中使用的一种作用域,表示全局性的HTTP会话。类似于
SESSION
作用域,但适用于分布式环境。
@Component @Scope(value = WebApplicationContext.SCOPE_GLOBAL_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS) public class MyGlobalSessionScopedBean { // ... }
- 全局会话作用域是在分布式环境中使用的一种作用域,表示全局性的HTTP会话。类似于
-
Application:
- 应用程序作用域表示在整个Web应用程序中只存在一个Bean实例。该Bean实例在整个Web应用程序的生命周期内都有效。
@Component @Scope(value = WebApplicationContext.SCOPE_APPLICATION, proxyMode = ScopedProxyMode.TARGET_CLASS) public class MyApplicationScopedBean { // ... }
需要注意的是,除了Singleton作用域外,其他作用域主要用于Web应用程序,因为它们依赖于HTTP请求和会话。在非Web环境中,通常使用Singleton和Prototype作用域。
Was this helpful?
0 / 0