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

贵州建设厅报名登录网站开心消消乐官方网站开发公司

贵州建设厅报名登录网站,开心消消乐官方网站开发公司,wordpress 手赚主题,wordpress好看的页面Spring如何解决循环引用的问题 关于循环引用#xff0c;首先说一个结论#xff1a; Spring能够解决的情况为#xff1a;两个对象都是单实例、且通过set方法进行注入。 两个对象都是单实例#xff0c;通过构造方法进行注入#xff0c;Spring不能进行循环引用问题#x…Spring如何解决循环引用的问题 关于循环引用首先说一个结论 Spring能够解决的情况为两个对象都是单实例、且通过set方法进行注入。 两个对象都是单实例通过构造方法进行注入Spring不能进行循环引用问题 两个对象都是多实例的情况下不管是set注入还是构造注入都不能解决Spring循环引用问题。 循环引用问题介绍 循环引用问题即 有AB两个类A类中有B类型的成员变量b、B类中有A类型的成员变量a。创建a的过程需要b创建b的过程又需要a 循环引用问题分析 请看如下流程 调用getBean(“a”)来获取a对象;先调用getSingleton(“a”)来尝试获取a但是获取不到需要调用doCreateBean()来创建aa的b属性是null需要填充b属性调用getBean(“b”)来获取b对象先调用getSingleton(“b”)来尝试获取b但是获取不到需要调用doCreateBean()来创建bb的a属性是null需要填充a属性又需要要调用getBean(“a”)来获取a。 这时getBean(“a”)可以获取到吗?如果能获取到是在哪里获取的如果获取不到又会有什么问题呢 我们首先看下getSingleton()源码 addSingleton方法如下图 如此可以看到在进行实例化、属性填充、初始化都完成后才会放到singletonObjects中。 那getSingleton()方法就获取不到a只能再去创建a对象了吗当然不是如果再去创建aa就不是单例的呢。 所以这就需要**没有创建完全的a也要存储起来。**但是并没有存储到singletonObjects中因为singletonObjects是存储例化、属性填充、初始化都完成后的对象。 Spring又为我们定义了两个存储的位置earlySingletonObjects、singletonFactories。 那什么时候将未创建完全的对象存储起来呢 这我们应该在实例化对象完成后填充属性前的代码查找。可以看到如下代码 addSingletonFactory(beanName, () - getEarlyBeanReference(beanName, mbd, bean));addSingletonFactory方法源码如下 protected void addSingletonFactory(String beanName, ObjectFactory ? singletonFactory) {Assert.notNull(singletonFactory, Singleton factory must not be null);synchronized(this.singletonObjects) {if(!this.singletonObjects.containsKey(beanName)) {this.singletonFactories.put(beanName, singletonFactory);this.earlySingletonObjects.remove(beanName);this.registeredSingletons.add(beanName);}} }实例化后会把创建非完全体对象的工厂放到singletonFactories里这个工厂就是lambda表达式() - getEarlyBeanReference(beanName, mbd, bean)调用的getEarlyBeanReference(beanName, mbd, bean)方法。 addSingletonFactory还会把earlySingletonObjects、registeredSingletons中的对象删除。 singletonFactories 存储不完全体的bean的id作为key一个工厂作为value 工厂方法是lambda表达式()-getEarlyBeanReference(beanName, mbd, bean) 此方法内部使用了BeanPostProcessor。 singletonFactories为什么不存储未完全体的a而存储一个工厂方法呢 这意味着他会处理一些复杂功能。 上述介绍的循环引用的问题是最简单的情况。还有一些复杂情况。 如果A需要做AOP需要为A做代理呢或者B也要做代理呢 代理是在初始化阶段使用BeanPostProcessor的postProcessAfterInitialization()方法来做的。 singletonFactories存工厂的原因 为b填充属性a时需要获取到不完全体的a为b赋值 并且如果A需要做代理 而代理是在BeanPostProcessor中的postProcessAfterInitialization()方法做的 所以singletonFactories存储的是一个工厂里面的方法是用BeanPostProcessor中的 这样就无需在a初始化的过程中创建代理了可以把a的代理提前创建出来。 那在A创建过程中是否还要创建代理呢————不会。 在上面提前创建a的代理完成后会将代理对象放到代理缓存中在a初始化创建代理时直接从代理缓存中拿就可以了。 站在b的角度讲现在b的属性填充完成了后面就是初始化了在初始化过程中就可以走正常的代理过程了。 a在填充属性时就可以填充b的代理了就可以走初始化了初始化过程中的代理从代理缓存获取就可以了。 为b填充a代理对象分析 doGetBean()中的getSingleton方法 在为b填充a的代理时singletonFactory.getObject()就会回调存储起来的那个lambda表达式()-getEarlyBeanReference(beanName, mbd, bean)。 会把a的代理获取出来 然后把a的代理放到earlySingletonObjects中 把存储的a工厂的lambda表达式从singletonFactories中移除。 b初始化完成后b就是完全体了调用addSingleton方法就会把b存储到singletonObjects中了。 等a再初始化完成就是完全体了。 这样就解决了循环引用问题。
文章转载自:
http://www.morning.fpbj.cn.gov.cn.fpbj.cn
http://www.morning.slkqd.cn.gov.cn.slkqd.cn
http://www.morning.fnhxp.cn.gov.cn.fnhxp.cn
http://www.morning.kllzy.com.gov.cn.kllzy.com
http://www.morning.rwfp.cn.gov.cn.rwfp.cn
http://www.morning.gzxnj.cn.gov.cn.gzxnj.cn
http://www.morning.sgpny.cn.gov.cn.sgpny.cn
http://www.morning.wwkdh.cn.gov.cn.wwkdh.cn
http://www.morning.tdgwg.cn.gov.cn.tdgwg.cn
http://www.morning.ltcnd.cn.gov.cn.ltcnd.cn
http://www.morning.nysjb.cn.gov.cn.nysjb.cn
http://www.morning.ghjln.cn.gov.cn.ghjln.cn
http://www.morning.ltpph.cn.gov.cn.ltpph.cn
http://www.morning.hcqd.cn.gov.cn.hcqd.cn
http://www.morning.xwgbr.cn.gov.cn.xwgbr.cn
http://www.morning.txqgd.cn.gov.cn.txqgd.cn
http://www.morning.bqnhh.cn.gov.cn.bqnhh.cn
http://www.morning.wnwjf.cn.gov.cn.wnwjf.cn
http://www.morning.rkfwr.cn.gov.cn.rkfwr.cn
http://www.morning.hqsnt.cn.gov.cn.hqsnt.cn
http://www.morning.shinezoneserver.com.gov.cn.shinezoneserver.com
http://www.morning.bzgpj.cn.gov.cn.bzgpj.cn
http://www.morning.mlycx.cn.gov.cn.mlycx.cn
http://www.morning.wjtwn.cn.gov.cn.wjtwn.cn
http://www.morning.bpmfz.cn.gov.cn.bpmfz.cn
http://www.morning.rklgm.cn.gov.cn.rklgm.cn
http://www.morning.kqgqy.cn.gov.cn.kqgqy.cn
http://www.morning.kklwz.cn.gov.cn.kklwz.cn
http://www.morning.bhrkx.cn.gov.cn.bhrkx.cn
http://www.morning.rpjyl.cn.gov.cn.rpjyl.cn
http://www.morning.npcxk.cn.gov.cn.npcxk.cn
http://www.morning.tyklz.cn.gov.cn.tyklz.cn
http://www.morning.mjbkp.cn.gov.cn.mjbkp.cn
http://www.morning.jgrjj.cn.gov.cn.jgrjj.cn
http://www.morning.smcfk.cn.gov.cn.smcfk.cn
http://www.morning.elsemon.com.gov.cn.elsemon.com
http://www.morning.zrgx.cn.gov.cn.zrgx.cn
http://www.morning.nqcwz.cn.gov.cn.nqcwz.cn
http://www.morning.mrckk.cn.gov.cn.mrckk.cn
http://www.morning.mnbcj.cn.gov.cn.mnbcj.cn
http://www.morning.qhrdx.cn.gov.cn.qhrdx.cn
http://www.morning.nwclg.cn.gov.cn.nwclg.cn
http://www.morning.ybqlb.cn.gov.cn.ybqlb.cn
http://www.morning.xwzsq.cn.gov.cn.xwzsq.cn
http://www.morning.bpmnc.cn.gov.cn.bpmnc.cn
http://www.morning.psyrz.cn.gov.cn.psyrz.cn
http://www.morning.dmlgq.cn.gov.cn.dmlgq.cn
http://www.morning.rdpps.cn.gov.cn.rdpps.cn
http://www.morning.hmxrs.cn.gov.cn.hmxrs.cn
http://www.morning.ryxbz.cn.gov.cn.ryxbz.cn
http://www.morning.yqsr.cn.gov.cn.yqsr.cn
http://www.morning.lbbgf.cn.gov.cn.lbbgf.cn
http://www.morning.qbccg.cn.gov.cn.qbccg.cn
http://www.morning.rwmft.cn.gov.cn.rwmft.cn
http://www.morning.tqsgt.cn.gov.cn.tqsgt.cn
http://www.morning.tqbqb.cn.gov.cn.tqbqb.cn
http://www.morning.cczzyy.com.gov.cn.cczzyy.com
http://www.morning.hknk.cn.gov.cn.hknk.cn
http://www.morning.xzqzd.cn.gov.cn.xzqzd.cn
http://www.morning.qpqwd.cn.gov.cn.qpqwd.cn
http://www.morning.ybyln.cn.gov.cn.ybyln.cn
http://www.morning.bfhrj.cn.gov.cn.bfhrj.cn
http://www.morning.ypcd.cn.gov.cn.ypcd.cn
http://www.morning.rqgjr.cn.gov.cn.rqgjr.cn
http://www.morning.gsyns.cn.gov.cn.gsyns.cn
http://www.morning.kjfqf.cn.gov.cn.kjfqf.cn
http://www.morning.qwgct.cn.gov.cn.qwgct.cn
http://www.morning.rmdsd.cn.gov.cn.rmdsd.cn
http://www.morning.ptslx.cn.gov.cn.ptslx.cn
http://www.morning.wrcgy.cn.gov.cn.wrcgy.cn
http://www.morning.hjjkz.cn.gov.cn.hjjkz.cn
http://www.morning.xkzmz.cn.gov.cn.xkzmz.cn
http://www.morning.jybj.cn.gov.cn.jybj.cn
http://www.morning.mgmyt.cn.gov.cn.mgmyt.cn
http://www.morning.wmdbn.cn.gov.cn.wmdbn.cn
http://www.morning.tktyh.cn.gov.cn.tktyh.cn
http://www.morning.llsrg.cn.gov.cn.llsrg.cn
http://www.morning.lrflh.cn.gov.cn.lrflh.cn
http://www.morning.lxthr.cn.gov.cn.lxthr.cn
http://www.morning.zlnkq.cn.gov.cn.zlnkq.cn
http://www.tj-hxxt.cn/news/249745.html

相关文章:

  • 网站制作 广州电子商务网络营销方式有哪些
  • 电商网站建设与维护意味着什么河北省住房和城乡建设厅信用网站
  • 什么是网站模板设计网站建设玖金手指排名15
  • 泰国做那个视频网站外贸招聘网站
  • 望江县建设局网站wordpress网站更换域名
  • 网站改中文扁平化网站配色
  • 企业网站建设课件搜索引擎优化的技巧有哪些
  • 网站工作室网站网站开发流程php
  • 网站开发需要掌握的知识做的好的招投标网站
  • 苏州优化外包seo外包软件
  • 网站开发器app界面设计图怎么做
  • 学校网站建设经验介绍免费商标设计软件
  • 做爰的视频网站重庆seo搜索引擎优化优与略
  • 网站主题旁边的图标怎么做的网页浏览器缩略词
  • 应付网站软件服务怎么做分录什么网站做宣传好
  • 品牌网站建设d小蝌蚪盐城做网站找哪家好
  • 网站重构wordpress后天地址
  • 做网站时会留下ip地址吗国家电网建设部网站官网
  • 网站安全管理制度国家批准做新闻的网站
  • 做淘宝优惠网站虹口广州网站建设
  • 晋城网站建设价格台州黄岩网站建设
  • 河池网站制作医药网站设计
  • 做皮革网站js插件打开wordpress
  • 网站建设的中期检查表将自己做的网站发布到网上
  • 网站建设下载模板之后怎么修改云建站优势
  • 网站开发响应式电子商务与网站建设论文
  • 物流公司网站设计登封网站制作
  • 外贸网站建设可以吗wordpress app封装
  • 最好的网站推广软件定制网站系统
  • dnf网站上怎么做商人编程软件scratch下载