在Spring框架中,Bean的作用域定义了Bean实例的生命周期和可见范围。以下是Spring中常见的几种Bean作用域:
- Singleton(单例) :
-
这是默认的作用域。
-
在整个Spring容器中,只存在一个Bean实例。
-
适用于无状态的服务层和数据访问层。
- Prototype(原型) :
-
每次从容器中获取Bean时都会创建一个新的实例。
-
适用于有状态的对象,如控制器和页面组件。
- Request(请求) :
-
在一次HTTP请求中,每个Bean都是一个新的实例。
-
仅在Web应用程序中使用,确保每个请求之间的数据隔离。
- Session(会话) :
-
在一个HTTP会话中,每个Bean都是一个新的实例。
-
同样只在Web应用程序中使用,用于跟踪用户状态。
- Global Session(全局会话) :
-
主要用于Portlet应用环境。
-
类似于Session作用域,但适用于Portlet环境下的全局会话。
- Application(应用) :
-
在ServletContext生命周期内,Bean为单例。
-
适用于需要在整个Web应用程序运行阶段共享的Bean。
- WebSocket(WebSocket) :
-
在WebSocket生命周期内,Bean为单例。
-
适用于需要跟踪WebSocket连接状态的场景。
通过配置<bean>
元素的scope
属性,可以指定Bean的作用域。例如,要声明一个每次请求都产生新实例的Bean,可以将scope
属性设置为prototype
。
需要注意的是,并非所有作用域都适用于所有类型的应用程序。例如,request
和session
作用域通常用于Web应用程序,而globalSession
主要用于Portlet环境。