可以通过三级缓存解决:
一级缓存:单例池,存储已经初始化好的Bean对象
二级缓存:缓存尚未完成生命周期的早期Bean对象
三级缓存:缓存ObjectFactory,用于创建Bean对象
解决循环依赖的流程:
1.实例化A对象,并创建ObjectFactory存入三级缓存。
2.在A初始化时需要B对象,开始B的创建逻辑
3.B实例化完成,也创建ObjectFactory存入三级缓存。
4.B需要注入A,通过三级缓存获取ObjectFactory生成A对象,存入二级缓存。
5.B通过二级缓存获取A对象后,B创建成功,存入一级缓存。
6.A对象初始化时,由于B已创建完成,可以直接注入B,A创建成功存入一级缓存。
7.清楚二级缓存中的临时对象A。