当前位置: 首页 > news >正文

linux 建立网站网站根目录验证文件

linux 建立网站,网站根目录验证文件,seo查询网址,建设企业网站的目的❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…

❤ 作者主页:欢迎来到我的技术博客😎
❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~*
🍊 如果文章对您有帮助,记得关注点赞收藏评论⭐️⭐️⭐️
📣 您的支持将是我创作的动力,让我们一起加油进步吧!!!🎉🎉

文章目录

  • 1、什么是循环依赖
  • 2、Spring实例Bean的本质
  • 3、Spring可以解决哪些情况下的循环依赖
  • 4、Spring怎么解决循环依赖
  • 5、为什么解决Spring循环依赖需要三级缓存,而二级缓存却不行
  • 6、总结

1、什么是循环依赖

在Spring框架中,循环依赖指的是两个或多个Bean之间相互依赖的情况,形成了依赖环路(Circular Dependency)。换句话说,这些Bean之间存在着相互引用,导致无法正确地创建和初始化这些 Bean。

通俗来讲,就是 Bean A 依赖 Bean B,而 Bean B 又依赖于 Bean A,或者是 Bean C 依赖自己本身,如下图所示:

在这里插入图片描述


2、Spring实例Bean的本质

在Spring中,当实例化一个Bean时,会按照依赖关系递归地实例化其所依赖的所有Bean,直到某个Bean不再依赖其他Bean或其依赖已经被实例化过。

具体来说,当实例化 Bean A 时,如果 Bean A 有依赖另一个 Bean B,Spring会先实例化 Bean B,并将其注入到 Bean A 中。而如果 Bean B 又依赖其他 Bean C,那么Spring会先实例化 Bean C,并将其注入到 Bean B 中,以此类推,直到找到一个 Bean 没有依赖其他Bean为止。


3、Spring可以解决哪些情况下的循环依赖

Spring解决循环依赖是由前置条件的:

  • 出现循环依赖的Bean必须要是单例(singleton),如果依赖prototype则完全不会有此需求
  • 依赖注入的方式不能全是构造器注入的方式
依赖情况依赖注入方式是否解决
AB循环依赖AB均采用构造器注入
AB循环依赖AB均采用setter方式注入
AB循环依赖AB均采用属性自动注入
AB循环依赖A中注入的B为setter注入,B中注入的A为构造器注入
AB循环依赖B中注入的A为setter注入,A中注入的B为构造器注入

注意: 第四种可以而第五种不可以的原因是 Spring 在创建 Bean 时默认会根据自然排序进行创建,所以 A 会先于 B 进行创建。


4、Spring怎么解决循环依赖

Spring通过 三级缓存 解决循环依赖:

  1. 一级缓存 Map<String,Object> singletonObjects:存放完全初始化好的Bean集合
  2. 二级缓存 Map<String,Object> earlySingletonObjects:存放创建好但没有初始化属性的Bean集合
  3. 三级缓存 Map<String,ObjectFactory<?>> singletonFactories:存放正在被创建的Bean的集合

当A、B两个类发生循环依赖时,我们看一下Spring是怎么解决循环依赖的:

  1. 创建A实例,实例化的时候把A对象工厂放入三级缓存,表示A开始实例化了,虽然这个对象还不完整,但是先曝出来让大家知道
    在这里插入图片描述
  2. A注入属性时,发现依赖于B,此时B还没有创建出来,所以先去实例化B。
  3. 同样的,B在注入属性时发现依赖于A,它就会从缓存里找A对象。以此从一级缓存到三级缓存去查询A,从三级缓存通过对象工厂拿到A,发现A虽然不太完善,但是却存在,于是把A放入二级缓存,同时删除三级缓存中的A。此时,B已经实例化并且初始化完成,把B放入到一级缓存

在这里插入图片描述
4. 接着A继续属性赋值,顺利从一级缓存中拿到实例化且初始化完成的B对象。此时,A对象也创建完成,删除二级缓存中的A,同时把A放入到一级缓存
5. 最后,一级缓存中保存实例化、初始化完成的A、B对象,Spring也顺利解决了循环依赖的问题。
在这里插入图片描述
注意:

因此,我们就知道为什么Spring能解决setter注入的循环依赖了,因为实例化和属性赋值是分开的,所以里面有操作的空间。如果都是构造器注入的话,那么都得在实例化这一步完成注入,所以自然是无法支持了。


5、为什么解决Spring循环依赖需要三级缓存,而二级缓存却不行

Spring框架解决循环依赖的过程中确实使用了三级缓存。这是因为在单纯的二级缓存情况下,可能会出现无法解决的循环依赖问题。

二级缓存仅仅可以解决同一个Bean在同一个解析过程中的循环依赖,但如果存在多个解析过程,二级缓存就无法满足需求。所以,Spring引入了三级缓存,以便更好地管理和解决多个Bean之间的循环依赖问题。

三级缓存的引入使得Spring可以在不同解析阶段间共享缓存,有效地解决了复杂的循环依赖情况,确保了Bean的正确初始化。


6、总结

  • 处理循环依赖有多种方式。首先考虑是否能够通过重新设计依赖来避免循环依赖。
  • 如果确实不可避免需要循环依赖,那么通过上面提到的方式来处理。优先建议使用setter注入来解决。

 
非常感谢您阅读到这里,如果这篇文章对您有帮助,希望能留下您的点赞👍 关注💖 分享👥 留言💬thanks!!!

http://www.sczhlp.com/news/74734/

相关文章:

  • 电 器建设网站目的及功能定位享设计网做兼职设计师怎么样
  • 长春企业自助建站系统付网站开发费用要计入什么科目
  • 杭州优质网站建设网络运维工程师周报
  • 如何用2级域名做网站公司做官网要多少钱
  • 新闻采集源码wordpress谷歌seo网站排名优化
  • 哪家做网站的好如何做网站后台管理员
  • 个人网站logo图片代做机械设计的网站
  • 龙华营销型网站建设大连做网站的企业
  • 杭州 高端网站 开发岳阳网站建设网站
  • 哪个网站做新中式研发地网站建设
  • 织梦cms 网站计数网站图表怎么做的
  • 网站后台seo优化如何做网站设计的初衷
  • PyPI测试套件性能优化:81%速度提升实战解析
  • C# Avalonia 13- MoreDrawing - MiniLanguage
  • 如何优化自己的网站百度权重排名
  • 在线做网站 自动生成手机版网站项目团队介绍怎么写
  • 国内优秀网页设计网站万网域名注册官网查询入口
  • 体育彩票网站开发方案中国建筑集团有限公司官网首页
  • 网站导航条怎么做元邦物流网站建设
  • 网站开发的实训内容东莞企业推广网站
  • 北京海淀国税局网站浙江省台州市做网站多少钱
  • 网站的设计分析网站300m空间
  • 架设一个网站网站后台内容不更新
  • 如何让网站火起来网站建设技术支持有什么
  • 如何做网站 新手 个人 教程阮一峰wordpress
  • 百度创意产品网站怎样查看网站是用什么做的
  • 建设网站需要会什么王烨重生
  • 免费的招标网站有哪些网站建设讲话
  • 欧拉路,欧拉回路
  • 你认为视频网站如何做推广庆阳网红宝军