为什么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规范即可生效。
这一张图呢,是表示各种作用域范围大小对比,其中prototype大于request大于session大于globalSession大于singleton。大家可以私信我获取高清图,下载下来慢慢看,帮助大家更好地理解作用域范围。
2、Spring为什么要定义作用域?
定义Bean的作用域,相当于用户可以通过配置的方式限制Spring Bean的使用范围,以起到保护Bean安全的作用。就好比孙悟空外出打妖怪前,给唐僧画了一个圈。唐僧只有待在圈里才能保证安全,出圈就可能会遇到危险。这样,唐僧访问不到圈外的资源,圈外的资源也无法触达到唐僧,以此形成一个安全的隔离区。
在日常开发中,我们可以根据业务需要,选择定义不同的作用域,以保护Bean的使用安全。
关于Spring Bean的作用域解析就到这里。
S信【Tom】或【666】即可免费领取需要更多干货内容,还有海量面试资料,只弹干货不惨水!
本文为“Tom弹架构”原创,转载请注明出处。技术在于分享,我分享我快乐!\ 如果本文对您有帮助,欢迎关注和点赞;如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力。关注微信公众号『 Tom弹架构 』可获取更多技术干货!
关注微信公众号『 Tom弹架构 』可获取更多技术干货!往期视频已经整理成文档形式,需要的小伙伴点个关注,搜索下方名片!我是被编程耽误的文艺Tom,
- 为什么MySQL索引结构采用B 树?
- 为什么Netty线程池默认大小为CPU核数的2倍
- 谈谈你对深克隆和浅克隆的理解
- 什么是代理,为什么要用动态代理?
- 什么是零拷贝,Netty是如何实现的?
- 3分钟轻松理解单线程下的HashMap工作原理
- 被面试官问烂的Spring AOP原理,你是怎么答的?
- Spring为何需要三级缓存解决循环依赖,而不是二级缓存?
- 为什么Spring中每个Bean都要定义作用域?
- 谈谈你对Spring Bean的理解
- 趣谈装饰器模式,让你一辈子不会忘
- 掌握这些招数,你也能写出HR眼中的高分简历
- MongoDB高级应用之数据转存与恢复(5)
- 图解MongoDB集群部署原理(3)
- 爆肝30天,肝出来史上最透彻Spring原理和27道高频面试题总结
- Spring核心原理之IoC容器初体验(2)
- Spring核心原理分析之MVC九大组件(1)
- 30个类手写Spring核心原理之动态数据源切换(8)
- 【紧急】Log4j又发新版2.17.0,只有彻底搞懂漏洞原因,才能以不变应万变,小白也能看懂
- 30个类手写Spring核心原理之自定义ORM(上)(6)