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

台州品牌网站设计成都达洱狐网络科技有限公司

台州品牌网站设计,成都达洱狐网络科技有限公司,网站免费优化工具,怎么做公司的网站什么是Bean的循环依赖 A对象中有B属性。B对象中有A属性。这就是循环依赖。我依赖你,你也依赖我。 比如:丈夫类Husband,妻子类Wife。Husband中有Wife的引用。Wife中有Husband的引用。 Spring解决循环依赖的机理 Spring为什么可以解决set s…

什么是Bean的循环依赖

A对象中有B属性。B对象中有A属性。这就是循环依赖。我依赖你,你也依赖我。

比如:丈夫类Husband,妻子类Wife。Husband中有Wife的引用。Wife中有Husband的引用。

Spring解决循环依赖的机理

Spring为什么可以解决set + singleton模式下循环依赖?

根本的原因在于:这种方式可以做到将“实例化Bean”和“给Bean属性赋值”这两个动作分开去完成。

实例化Bean的时候:调用无参数构造方法来完成。此时可以先不给属性赋值,可以提前将该Bean对象“曝光”给外界。

给Bean属性赋值的时候:调用setter方法来完成。

两个步骤是完全可以分离开去完成的,并且这两步不要求在同一个时间点上完成。

也就是说,Bean都是单例的,我们可以先把所有的单例Bean实例化出来,放到一个集合当中(我们可以称之为缓存),所有的单例Bean全部实例化完成之后,以后我们再慢慢的调用setter方法给属性赋值。这样就解决了循环依赖的问题。

Spring框架底层源码级别上是如何实现的:

在以上类中包含三个重要的属性:

*Cache of singleton objects: bean name to bean instance.* 单例对象的缓存:key存储bean名称,value存储Bean对象【一级缓存】

*Cache of early singleton objects: bean name to bean instance.* 早期单例对象的缓存:key存储bean名称,value存储早期的Bean对象【二级缓存】

*Cache of singleton factories: bean name to ObjectFactory.* 单例工厂缓存:key存储bean名称,value存储该Bean对应的ObjectFactory对象【三级缓存】

这三个缓存其实本质上是三个Map集合。

我们再来看,在该类中有这样一个方法addSingletonFactory(),这个方法的作用是:将创建Bean对象的ObjectFactory对象提前曝光。

再分析下面的源码:

从源码中可以看到,spring会先从一级缓存中获取Bean,如果获取不到,则从二级缓存中获取Bean,如果二级缓存还是获取不到,则从三级缓存中获取之前曝光的ObjectFactory对象,通过ObjectFactory对象获取Bean实例,这样就解决了循环依赖的问题。

Spring只能解决setter方法注入的单例bean之间的循环依赖。

ClassA依赖ClassB,ClassB又依赖ClassA,形成依赖闭环。

Spring在创建ClassA对象后,不需要等给属性赋值,直接将其曝光到bean缓存当中。

在解析ClassA的属性时,又发现依赖于ClassB,再次去获取ClassB,当解析ClassB的属性时,又发现需要ClassA的属性,但此时的ClassA已经被提前曝光加入了正在创建的bean的缓存中,则无需创建新的的ClassA的实例,直接从缓存中获取即可。从而解决循环依赖问题。  

http://www.zhongyajixie.com/news/48632.html

相关文章:

  • 中国工商网官方网站惠州网站建设
  • 北京商场客流恢复六成郑州整站网站优化
  • 宁波网站建设联系荣胜百度关键字
  • 自己可以做微网站吗搜索优化推广公司
  • 网站建设与网页设计百度云网盘搜索引擎
  • 如何开网站卖东西快速提高关键词排名的软件
  • 党办网站建设属于b2b的网站有哪些
  • 行业网站建设的书优化软件
  • 网站建设合同不给版权2021年搜索引擎排名
  • 用vps刷网站流量要怎么做怎么引流推广自己的产品
  • 图书网站策划书自己如何制作一个小程序
  • 哪儿有做字体设计的网站怎样注册网站建立网页
  • ui设计培训一般多少钱关键词优化seo优化
  • 网站系统是一个典型的太原seo建站
  • 邢台做移动网站费用百度导航下载2022最新版
  • WordPress推送帖子到QQ群seo好学吗入门怎么学
  • 怎么做网站内部搜索功能深圳优化seo排名
  • 做网站分成品牌宣传有哪些途径
  • 啥是东莞网站优化推广武汉seo关键词优化
  • 杭州建站官网建设怎么下载有风险的软件
  • 百度网站优化排行seo排名技术教程
  • 那里做网站最好濮阳市网站建设
  • 广州番禺疫情最新情况北京seo推广公司
  • 网站做彩票免费开发网站
  • 家装设计效果图网站上海建站seo
  • 做网站0基础写代码长沙seo外包优化
  • 网站建设投资湖南靠谱seo优化报价
  • 教学网站开发论文完整的社群营销方案
  • 做网站 你的出路在哪里锦州网站seo
  • 教育类网站设计东莞网站seo技术