Spring 中的循环引用
循环依赖:循环依赖其实就是循环引用,也就是两个或两个以上的 bean 互相持有对方,最终形成闭环。比如 A 依赖于 B , B 依赖于 A ;
循环依赖在 spring 中是允许存在,spring 框架依据三级缓存已经解决了大部分的循环依赖 。
一级缓存:单例池,缓存已经经历了完整的生命周期,已经初始化完成的 bean 对象
二级缓存:缓存早期的 bean 对象(生命周期还没走完)
三级缓存:缓存的是 ObjectFactory,表示对象工厂,用来创建某个对象的
构造函数循环依赖的解决方法
由于 bean 的生命周期中构造函数是第一个执行的,spring 框架并不能解决构造函数的的依赖注入,可以使用 @Lazy 进行懒加载,什么时候需要对象再进行 bean 对象的创建。