说一下 Spring 中支持的 bean 作用域?【面试题详解】

今天爱分享给大家带来说一下 Spring 中支持的 bean 作用域?【面试题详解】,希望能够帮助到大家。
1、singleton 作用域
当一个bean的作用域设置为singleton,那么Spring IOC容器中只会存在一个共享的bean
实例,并且所有对 bean 的请求,只要 id 与该 bean 定义相匹配,则只会返回 bean 的同
一实例。换言之,当把一个 bean 定义设置为 singleton 作用域时,Spring IOC 容器只会
创建该 bean 定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,
并且所有针对该 bean 的后续请求和引用都将返回被缓存的对象实例,这里要注意的是
singleton 作用域和 GOF 设计模式中的单例是完全不同的,单例设计模式表示一个
ClassLoader 中只有一个 class 存在,而这里的 singleton 则表示一个容器对应一个 bean,
也就是说当一个 bean 被标识为 singleton 时候,spring 的 IOC 容器中只会存在一个该
bean。
2、prototype
prototype 作用域部署的 bean,每一次请求(将其注入到另一个 bean 中,或者以程序的
方式调用容器的 getBean()方法)都会产生一个新的 bean 实例,相当于一个 new 的操作,
对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个 prototype bean
的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个 prototype 实例后,
将它交给客户端,随后就对该 prototype 实例不闻不问了。不管何种作用域,容器都会
调用所有对象的初始化生命周期回调方法,而对 prototype 而言,任何配置好的析构生
命周期回调方法都将不会被调用。清除 prototype 作用域的对象并释放任何 prototype
bean 所持有的昂贵资源,都是客户端代码的职责。(让 Spring 容器释放被 singleton 作用
域 bean 占用资源的一种可行方式是,通过使用 bean 的后置处理器,该处理器持有要被
清除的 bean 的引用。)
3、request
request 表示该针对每一次 HTTP 请求都会产生一个新的 bean,同时该 bean 仅在当前
HTTP request 内有效,
4、session
session 作用域表示该针对每一次 HTTP 请求都会产生一个新的 bean,同时该 bean 仅在
当前 HTTP session 内有效,
5、global session
global session 作用域类似于标准的 HTTP Session 作用域,不过它仅仅在基于 portlet 的
web 应用中才有意义。Portlet 规范定义了全局 Session 的概念,它被所有构成某个 portlet
web 应用的各种不同的 portlet 所共享。在 global session 作用域中定义的 bean 被限定于
全局 portlet Session 的生命周期范围内。如果你在 web 中使用 global session 作用域来标
识 bean,那么,web 会自动当成 session 类型来使用。

人已赞赏
Java

DI 是什么?【面试题详解】

2020-12-10 15:54:40

Java

什么是 Spring 的 MVC 框架?【面试题详解】

2020-12-10 15:57:35

'); })();