Spring:IoC 容器与循环依赖
理解控制反转与依赖注入,重点掌握 Spring 用三级缓存解决单例循环依赖的原理与边界。
本节你将能
解释 IoC/DI 的概念,说清三级缓存如何解决 setter/字段注入的循环依赖,以及为什么构造器注入无解。
核心要点
- IoC 把对象创建与依赖管理交给容器;DI 是其实现方式。
- 三级缓存:singletonObjects(成品) / earlySingletonObjects(早期) / singletonFactories(早期引用工厂)。
- 工厂延迟决定是否生成 AOP 代理,二级缓存固化早期结果,避免重复创建代理。
- 构造器注入在实例化阶段就要完整参数,此时无早期引用可暴露,故无法解决循环依赖。
面试连招
追问:如果去掉二级缓存会怎样?多级缓存为何需要三级而不是两级?