链接:https://www.nowcoder.com/questionTerminal/a5f6220ad0fa49b2a026278c903cc359?toCommentId=2552951

来源:牛客网

image.png

在 Spring 中,bean 的作用范围分以下几种:

singleton:使用该属性定义Bean时,IOC容器仅创建一个Bean实例,IOC容器每次返回的是同一个Bean实例。

singleton是默认的作用域,当定义Bean时,如果没有指定scope配置项,Bean的作用域被默认为singleton prototype:使用该属性定义Bean时,IOC容器可以创建多个Bean实例,每次返回的都是一个新的实例

request:该属性仅对HTTP请求产生作用,使用该属性定义Bean时,每次HTTP请求都会创建一个新的Bean,适用于WebApplicationContext环境。

session:该属性仅用于HTTP Session,同一个Session共享一个Bean实例。不同Session使用不同的实例。

global session:该属性仅用于HTTP Session,同session作用域不同的是,所有的Session共享一个Bean实例。

通过 scope 属性指定 bean 的作用范围,包括:

① singleton:单例模式,是默认作用域,不管收到多少 Bean 请求每个容器中只有一个唯一的 Bean 实例。

② prototype:原型模式,和 singleton 相反,每次 Bean 请求都会创建一个新的实例。

③ request:每次 HTTP 请求都会创建一个新的 Bean 并把它放到 request 域中,在请求完成后 Bean 会失效并被垃圾收集器回收。

④ session:和 request 类似,确保每个 session 中有一个 Bean 实例,session 过期后 bean 会随之失效。

⑤ global session:当应用部署在 Portlet 容器时,如果想让所有 Portlet 共用全局存储变量,那么该变量需要存储在 global session 中。