为什么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规范即可生效。

为什么Spring中每个Bean都要定义作用域?_第1张图片

为什么Spring中每个Bean都要定义作用域?_第2张图片

这一张图呢,是表示各种作用域范围大小对比,其中prototype大于request大于session大于globalSession大于singleton。大家可以私信我获取高清图,下载下来慢慢看,帮助大家更好地理解作用域范围。
2、Spring为什么要定义作用域?
定义Bean的作用域,相当于用户可以通过配置的方式限制Spring Bean的使用范围,以起到保护Bean安全的作用。就好比孙悟空外出打妖怪前,给唐僧画了一个圈。唐僧只有待在圈里才能保证安全,出圈就可能会遇到危险。这样,唐僧访问不到圈外的资源,圈外的资源也无法触达到唐僧,以此形成一个安全的隔离区。

为什么Spring中每个Bean都要定义作用域?_第3张图片

在日常开发中,我们可以根据业务需要,选择定义不同的作用域,以保护Bean的使用安全。
关于Spring Bean的作用域解析就到这里。
我是被编程耽误的文艺Tom,如果大家还有其他疑问,也可以在评论区留言。如果我的解析对你有帮助,请动动手指一键三连分享给更多的人。
关注我,面试不再难!

为什么Spring中每个Bean都要定义作用域?_第4张图片

你可能感兴趣的:(spring)