旅游网站建设论文,wordpress自定义广告,开发公司资质等级,网站平台 生态建设Spring中的循环引用 循环依赖#xff1a;循环依赖其实就是循环引用,也就是两个或两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于A 循环依赖在spring中是允许存在#xff0c;spring框架依据三级缓存已经解决了大部分的循环依赖 ①一级缓存#xff1a;单例池…Spring中的循环引用
循环依赖循环依赖其实就是循环引用,也就是两个或两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于A 循环依赖在spring中是允许存在spring框架依据三级缓存已经解决了大部分的循环依赖 ①一级缓存单例池缓存已经经历了完整的生命周期已经初始化完成的bean对象②二级缓存缓存早期的bean对象生命周期还没走完③三级缓存缓存的是ObjectFactory表示对象工厂用来创建某个对象的
解决流程
第一先实例A对象同时会创建ObjectFactory对象存入三级缓存singletonFactories第二A在初始化的时候需要B对象这个走B的创建的逻辑第三B实例化完成也会创建ObjectFactory对象存入三级缓存singletonFactories第四B需要注入A通过三级缓存中获取ObjectFactory来生成一个A的对象同时存入二级缓存这个是有两种情况一个是可能是A的普通对象另外一个是A的代理对象都可以让ObjectFactory来生产对应的对象这也是三级缓存的关键第五B通过从通过二级缓存earlySingletonObjects 获得到A的对象后可以正常注入B创建成功存入一级缓存singletonObjects第六回到A对象初始化因为B对象已经创建完成则可以直接注入BA创建成功存入一次缓存singletonObjects第七二级缓存中的临时对象A清除
构造方法出现了循环依赖
由于bean的生命周期中构造函数是第一个执行的spring框架并不能解决构造函数的的依赖注入可以使用Lazy懒加载什么时候需要对象再进行bean对象的创建