在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 { // ... }
-
Application(应用程序):
- 仅在Web应用程序中有效,表示在整个Web应用程序中只存在一个Bean实例。该Bean实例在整个Web应用程序的生命周期内都有效。
@Component @Scope(value = WebApplicationContext.SCOPE_APPLICATION, proxyMode = ScopedProxyMode.TARGET_CLASS) public class MyApplicationScopedBean { // ... }
这些作用域可以根据实际需求选择,用于控制Bean实例的生命周期和可见范围。在非Web环境中,通常使用Singleton和Prototype作用域。而在Web环境中,除了Singleton和Prototype,还可以使用Request、Session和Application作用域。
Was this helpful?
0 / 0