上一题下一题

Spring 三级缓存解决循环依赖时,早期暴露对象、AOP 代理对象和最终单例对象之间的身份一致性如何保证?

旗舰版
来源:alibaba高级工程师早期对象暴露AOP代理与Bean生命周期循环依赖Spring三级缓存
草稿该题目为草稿状态,前台公开题库中不可见。
答案解析

Spring 三级缓存解决循环依赖时,核心要保证一点: 其他 Bean 提前拿到的对象,和最终放进单例池里的对象必须是同一个对象引用 ,尤其是在 AOP 场景下,不能出现有的地方注入原始对象,有的地方注入代理对象。

Spring 主要通过三级缓存和 AOP 的提前代理机制来保证这个一致性。

三级缓存分别是:

以 A 依赖 B,B 又依赖 A 为例:

A 实例化之后,还没完成属性注入和初始化,Spring 会把 A 的一个 ObjectFactory 放入三级缓存:

这里并不是直接把原始 A 对象暴露

登录后查看完整内容