循环引用过程
- singletonObjects,单例缓存,存储已经实例化完成的单例。
- singletonFactories,生产单例的工厂的缓存,存储工厂。
- earlySingletonObjects,提前暴露的单例缓存,这时候的单例刚刚创建完,但还会注入依赖。
SingletonFactories中有,调用ObjectFactory.getObject()获取earlyBean,放入EarlySingletonObject
为什么需要三级缓存呢?
三级缓存就是为了解决动态代理类的循环引用问题
三级缓存(SingletonFactories)放入二级缓存(earlySingletonObjects)的时候,会判断是否有SmartInstantiationAwareBeanPostProcessor这样的后置处理器
而实现这个方法的类主要就一个就是负责动态代理的BeanPostProcessor。
将ObjectFactory
【好文】Spring 动态代理时是如何解决循环依赖的?为什么要使用三级缓存? - 知乎
aop代理对象何时放入缓存中的?
【好文】面试必杀技,讲一讲Spring中的循环依赖_I want to know a little more.-CSDN博客