Spring 三级缓存解决循环依赖时,早期暴露对象、AOP 代理对象和最终单例对象之间的身份一致性如何保证?
旗舰版来源:alibaba高级工程师早期对象暴露AOP代理与Bean生命周期循环依赖Spring三级缓存
草稿
答案解析
Spring 三级缓存解决循环依赖时,核心要保证一点: 其他 Bean 提前拿到的对象,和最终放进单例池里的对象必须是同一个对象引用 ,尤其是在 AOP 场景下,不能出现有的地方注入原始对象,有的地方注入代理对象。
Spring 主要通过三级缓存和 AOP 的提前代理机制来保证这个一致性。
三级缓存分别是:
以 A 依赖 B,B 又依赖 A 为例:
A 实例化之后,还没完成属性注入和初始化,Spring 会把 A 的一个 ObjectFactory 放入三级缓存:
这里并不是直接把原始 A 对象暴露
登录后查看完整内容
