Bean 的作用域
-
单例作用域
定义:Singleton 是默认的作用域。即容器中只会存在一个 Bean 实例,无论该 Bean 被引用多少次,始终返回同一个实例。
生命周期:容器在启动时创建该 Bean 的单一实例,并在整个容器的生命周期内使用该实例。
适用场景:适用于共享数据的场景,常用于不依赖于请求上下文和会话的 Bean。 -
原型作用域
定义:每次请求(例如,调用 getBean() 方法)都会返回一个新的 Bean 实例。每个请求都会创建一个新的 Bean 对象。
生命周期:容器在创建 Bean 时,每次都会生成一个新的实例。即使是同一个类,每次获取 Bean 都是不同的对象。
适用场景:适用于需要每次调用时都创建新实例的场景,例如无状态的服务。 -
请求作用域
定义:Request 作用域意味着每个 HTTP 请求都会创建一个新的 Bean 实例,并且该实例只在当前请求的生命周期内有效。
生命周期:当一个 HTTP 请求开始时,Spring 容器会创建一个新的 Bean 实例,直到该请求完成后,该 Bean 实例会被销毁。
适用场景:通常在 Web 应用中使用,用于处理每个 HTTP 请求所需的 Bean,例如控制器(Controller)中的请求处理方法。 -
会话作用域
定义:Session 作用域表示每个 HTTP 会话(session)都会创建一个新的 Bean 实例。每个用户的会话将拥有自己的 Bean 实例。
生命周期:当用户第一次发起请求时,Spring 会为该用户会话创建一个新的 Bean 实例,直到该会话结束后,该实例会被销毁。
适用场景:适用于 Web 应用中需要在用户会话中存储数据的场景,例如存储用户登录信息的 Bean。
5.全局会话作用域
定义:Global Session 作用域类似于 Session 作用域,但它的生命周期是全局的,通常用于 Portlet Web 应用中。每个全局会话(通常对应于所有的 portlet 应用)都会创建一个新的 Bean 实例。
生命周期:它的生命周期与 Session 作用域类似,但适用于所有 portlet 容器的全局会话。
适用场景:通常用于 Portlet 应用。