Java教程

为什么Spring中每个Bean都要定义作用域?

本文主要是介绍为什么Spring中每个Bean都要定义作用域?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!


大家好,我是被编程耽误的文艺Tom。

前面的视频中都有提到过Spring Bean的作用域。本期视频呢,我针对Spring Bean作用域做一个详细的解答。关于Spring Bean的作用域,我一共分为两个部分来介绍。首先,介绍Spring Bean作用域的定义,然后,介绍Spring为什么要定义作用域?

咱们先来看Spring Bean作用域的定义有哪些?

1、Sprin g Bean作用域的定义    

在Spring配置中,我们可以通过scope属性来定义Spring Bean的作用域,可以接受5个内建的值,分别代表5种作用域类型,下面给大家详细总结一下: 

1、singleton,用来定义一个Bean为单例,也就是说在Spring loC容器中仅有唯一的一个实例对象,Spring中的Bean默认都是单例的。它的作用域范围是ApplicationContext容器

2、prototype,用来定义一个Bean为多例,也就是说在每次请求获取Bean的时都会重新创建实例,因此每次获取到的实例对象都是不同的。它的作用域范围是调用getBean方法直至获取对象。

3、request,用来定义一个作用范围仅在request中的Bean,也就是说在每次HTTP请求时会创建一个实例,该实例仅在当前   Request中有效。它的作用域范围是每次发起HTTP请求直至拿到响应结果。

4、session,用来定义一个作用范围仅在session中的Bean,也就是说在每次HTTP请求时会创建—个实例,该实例仅在当前HTTP Session中有效。它的作用域范围是浏览器首次访问至浏览器关闭。

5、globalSession,用来定义一个作用范围仅在中的Bean。这种方式仅用于

应用环境,也就是说该实例仅存在于WebApplicationContext环境中。它的作用域范围是整个WebApplicationContext容器。

第一个singleton和第二个prototype是比较常用的。其他三种仅适用于Web应用环境中,咱们也无须关心用什么样的框架,只需要符合J2EE规范即可生效。

https://img1.sycdn.imooc.com/625788e8000184eb07810648.jpg


https://img3.sycdn.imooc.com/625788e800012bed07610572.jpg


这一张图呢,是表示各种作用域范围大小对比,其中prototype大于request大于session大于globalSession大于singleton。大家可以私信我获取高清图,下载下来慢慢看,帮助大家更好地理解作用域范围。

2、Spring为什么要定义作用域?

定义Bean的作用域,相当于用户可以通过配置的方式限制Spring Bean的使用范围,以起到保护Bean安全的作用。就好比孙悟空外出打妖怪前,给唐僧画了一个圈。唐僧只有待在圈里才能保证安全,出圈就可能会遇到危险。这样,唐僧访问不到圈外的资源,圈外的资源也无法触达到唐僧,以此形成一个安全的隔离区。

https://img1.sycdn.imooc.com/625788e800017ff507780431.jpg

在日常开发中,我们可以根据业务需要,选择定义不同的作用域,以保护Bean的使用安全。

关于Spring Bean的作用域解析就到这里。

我是被编程耽误的文艺Tom,如果大家还有其他疑问,也可以在评论区留言。如果我的解析对你有帮助,请动动手指一键三连分享给更多的人。

关注我,面试不再难!


这篇关于为什么Spring中每个Bean都要定义作用域?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!