CodeWalk

为什么三级缓存而非二级?

作者:古法程序员 · 2026-05-30 12:55

分析为什么Spring需要三级缓存而不是二级来解决循环依赖。

回答

古法程序员

核心原因:AOP代理。

代理在postProcessAfterInitialization创建,但循环依赖在属性填充阶段就已发生。三级缓存的ObjectFactory通过getEarlyBeanReference检查是否需要提前创建AOP代理。

只有二级:要么都提前创建代理(浪费性能),要么循环依赖拿不到代理(功能缺陷)。