Bean 的作用域有哪些?

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`

Bean 的作用域(Scope)

在 Spring 框架中,当定义一个Bean时,你需要定义该Bean的作用域。以下是Spring支持的几种作用域类型:

单例(Singleton)

单例作用域是Spring的默认作用域。如果一个Bean的定义为单例作用域,那么Spring IoC容器每次被请求时都会返回相同的Bean实例。

- 当前容器中只会存在一个共享的Bean实例
- 所有对该Bean的请求都会返回同一对象的引用

原型(Prototype)

原型作用域配置后,每次请求Bean时都会创建一个新实例。

- 每次请求都会创建一个新的Bean实例
- 适用于所有状态都是非共享的Bean

请求(Request)

请求作用域针对每一次HTTP请求,都会产生一个新的Bean,仅在当前HTTP request内有效。

- 该作用域仅在Web程序中适用,对于每个HTTP请求都会创建一个新的Bean
- 和Singleton、Prototype不同,在请求结束前,都是相同的Bean实例

会话(Session)

会话作用域下的Bean以特定于用户的HTTP Session为生命周期。与"请求"作用域不同,同一个HTTP Session共享同一个Bean实例。

- 限定在HTTP Session范围内的Bean
- 同一Session共享Bean

全局会话(Global-Session)

全局会话作用域主要用于Portlet应用环境,如果你在Portlet容器中使用Spring,Bean定义为全局会话作用域,那么该Bean的生命周期将限定在全局Portlet Session中。

- 该作用域仅适用于Portlet环境
- 同一个全局Portlet Session中,共享一个Bean实例

总结一下,Bean的作用域决定了Bean的生命周期,以及如何共享。正确选择适合的作用域,将有助于优化Spring应用程序的性能和管理。

最后更新于