在 Spring 框架中,Bean 的作用域可以分为以下 5 种:
- singleton:单例模式,一个 Bean 在整个应用中只有一个实例。
- prototype:原型模式,每次请求都会创建一个新的实例。
- request:每个 HTTP 请求都会创建一个新的实例,该实例仅在当前请求内部有效。
- session:每个 HTTP 会话都会创建一个新的实例,该实例仅在当前会话内部有效。
- global-session:全局会话作用域,仅在使用基于 Portlet 的 web 应用时才有意义,表示全局会话,一个全局会话可以包含多个普通会话。
我通常使用的作用域是 singleton 和 prototype。singleton 适用于那些只需要一个实例的 Bean,例如 DAO、Service 等组件,能够减少对象的创建和销毁开销,提高应用性能;而 prototype 适用于那些每次调用都需要新的实例的 Bean,例如 Action、Controller 等组件。对于需要在 Web 应用中使用的 Bean,也可以考虑使用 request 或 session 作用域。需要根据具体的场景来选择合适的作用域。