推荐答案
Spring Bean 的作用域有以下几种:
- Singleton:默认作用域,Spring 容器中只存在一个 Bean 实例。
- Prototype:每次请求时都会创建一个新的 Bean 实例。
- Request:每次 HTTP 请求都会创建一个新的 Bean 实例,仅适用于 Web 应用。
- Session:在一个 HTTP Session 中共享一个 Bean 实例,仅适用于 Web 应用。
- Application:在一个 ServletContext 中共享一个 Bean 实例,仅适用于 Web 应用。
- WebSocket:在一个 WebSocket 会话中共享一个 Bean 实例,仅适用于 Web 应用。
本题详细解读
Singleton 作用域
- 定义:Singleton 是 Spring 默认的作用域,Spring 容器中只存在一个 Bean 实例。
- 使用场景:适用于无状态的 Bean,或者需要共享状态的 Bean。
- 配置方式:可以通过
@Scope("singleton")
或 XML 配置<bean scope="singleton">
来指定。
Prototype 作用域
- 定义:每次请求时都会创建一个新的 Bean 实例。
- 使用场景:适用于有状态的 Bean,或者每次请求都需要一个新的实例。
- 配置方式:可以通过
@Scope("prototype")
或 XML 配置<bean scope="prototype">
来指定。
Request 作用域
- 定义:每次 HTTP 请求都会创建一个新的 Bean 实例。
- 使用场景:适用于 Web 应用中,每个请求需要独立的 Bean 实例。
- 配置方式:可以通过
@Scope("request")
或 XML 配置<bean scope="request">
来指定。
Session 作用域
- 定义:在一个 HTTP Session 中共享一个 Bean 实例。
- 使用场景:适用于 Web 应用中,每个用户会话需要独立的 Bean 实例。
- 配置方式:可以通过
@Scope("session")
或 XML 配置<bean scope="session">
来指定。
Application 作用域
- 定义:在一个 ServletContext 中共享一个 Bean 实例。
- 使用场景:适用于 Web 应用中,整个应用共享一个 Bean 实例。
- 配置方式:可以通过
@Scope("application")
或 XML 配置<bean scope="application">
来指定。
WebSocket 作用域
- 定义:在一个 WebSocket 会话中共享一个 Bean 实例。
- 使用场景:适用于 WebSocket 应用中,每个 WebSocket 会话需要独立的 Bean 实例。
- 配置方式:可以通过
@Scope("websocket")
或 XML 配置<bean scope="websocket">
来指定。
通过理解这些作用域,开发者可以根据具体需求选择合适的 Bean 作用域,从而更好地管理 Bean 的生命周期和状态。