Spring 支持的 Bean 作用域有哪些

Spring 支持的 Bean 作用域有哪些

「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战

这道面试是一个比较基础的问题,当你在刚接触 Spring 框架的时候,老师就告诉你 Spring 中默认的 Bean 都是单例的,在容器中有且仅有一个对象。但是在很多日常工作情况下,我们除了把它设置成单类的 Bean 之外,还有一些原型 request、session等各种各样的情况,因此还是需要进行一个详细了解的。

singleton

在 Spring IoC 容器仅存在一个 Bean 实例,Bean 以单例方式存在,Bean 作用域范围的默认值。这是在创建命对象的时候,没有特殊指令的时候,默认都是有且仅有一个对象。当使用该属性定义 Bean 时,注意了,容器只会创建一个 Bean 实例,而且不管你用多少次,不管你通过什么样的方式来进行调用,它最终返回的都是同一个 Bean 对象。

prototype

每次从容器中调用 Bean 时,都返回一个新的实例,即每次调用 getBean() 时,相当于执行 newXxxBean()。表示IoC 容器可以创建多个 Bean 对象实力,而且每次用的时候都是创建一个新的,不会出现对象的复用。这种情况下会有可能造成什么?容器里面会包含很多个相同类型的对象,用起来会比较麻烦啊,或者对象回收的时候会比较麻烦。当然有些特殊的应用场景里面是需要这么使用的,但是一般情况,如果没有特殊指示说明,采用 singleton 或者是 单例模式即可。

request

它不是我们基础的 Spring 程序里面支持的,而是支持 Web 程序。我们都知道 Spring 是需要整合 Spring MVC 来进行 Web 开发的,而这个属性是对 HTTP 请求产生作用的,当使用该属性定义 Bean 时。每次你在发送一个 HTTP 请求的时候,它都会帮我们创建一个新的 Bean 对象,因为每次都是一个新的请求,所以对象也是不一样的。该作用域仅适用于 Web 的 Spring WebApplicationContext 这样一个环境。,这种作用域用得很少。

session。

表示绘画,它作用于什么作用于 Web 应用程序里面的绘画级别。当我开启一个 会话之后,我会创建一个对象,注意只有一个会话里面共享同一个对象。如果你开启了 N 多个会话的话,那么不同的会话里面会包含不同的设计对象,他们相互之间是没有任何干扰的。】

global-session

同样适用于 HTTP Session 这样的一个情况。但是不同的 Session 作用域是会共享同一个 Bean 实例,这种作用域用的其实也很少,或者压根就没用过,反正我在我的生产环境里面没有用过。但是你要知道它有这样一个配置项,并且你可以对它进行相关的一个配置性。

你只要把这几点记住就可以了,它没有太深的一些原理或者底层知识的一个支撑,就看一下你在不同的应用场景里面你要做什么样的选择就可以了。

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部