引用:https://blog.csdn.net/wujun2412/article/details/123392678
spring内部有三级缓存:
singletonObjects 一级缓存,用于保存实例化、注入、初始化完成的bean实例
earlySingletonObjects 二级缓存,用于保存实例化完成的bean实例
singletonFactories 三级缓存,用于保存bean创建工厂,以便于后面扩展有机会创建代理对象。
引用:https://www.zhihu.com/question/438247718/answer/1730527725
A对象依赖了B对象,B对象依赖了A对象。 在Spring中,一个对象并不是简单new出来了,而是会经过一系列的Bean的生命周期(核心是属性方法的依赖注入),导致在创建Bean的过程中,出现了互相等待的情况。 ABean创建–>依赖了B属性–>触发BBean创建—>B依赖了A属性—>需要ABean(但ABean还在创建过程中):这时候就会导致A和B都创建不出来。 最简单的解决循环依赖的方式:@Lazy注解,直接生成空的代理对象赋值! 俩个互相依赖的Bean都是原形的,循环依赖无法解决!因为原形的不能用之前创建的对象(每次都是一个新对象)! 构造方法的方式去循环依赖,因为无法将构造方法实例化,所以循环依赖无法解决! 引用:https://baijiahao.baidu.com/s?id=1725477878360246135&wfr=spider&for=pc