spring循环依赖&三级缓存
单个单例Bean创建过程
总结
回顾一下经常说的Spring Bean生命周期(实例化阶段->属性填充阶段->初始化阶段->使用阶段->销毁阶段),其实上图已经可以看到部分主要阶段所对应的实现方法:
- createBeanInstance方法:负责Bean的实例化
- populateBean方法:负责当前Bean依赖属性的填充
- initializeBean方法:负责初始化和Bean后置处理器的调用
A-bean依赖B-bean创建过程
总结
根据流程图可以得出一下结论:
- spring每次创建完bean之后,都会将原始bean封装成ObjectFactory对象放在三级缓存中
- 在实例化完A-bean对象后,在填充阶段,发现依赖B-bean,所以触发B-bean的创建过程
- 开始创建B-bean,B-bean没有依赖其他bean,所以没有触发其他bean的创建
- 当B-bean创建完成,成功填充A-bean的属性,接着执行A-bean的初始化过程,完成A-bean的创建