01 — IoC 容器
定位: Spring 框架的基石——控制反转(IoC)与依赖注入(DI)的原理与实践 面试高频度: ⭐⭐⭐⭐⭐
一、板块在体系中的位置
+----------------------------------------------------+
| Spring 知识体系 |
| |
| 01. IoC 容器 (本板块) |
| | 基石依赖 |
| 02. AOP ----> 03. 事务管理 |
| | | |
| 04. Spring MVC 06. 数据访问 |
| | |
| 05. Spring Boot (一切之上) |
+----------------------------------------------------+二、知识全景图
+----------------------------------------------------+
| IoC 容器核心概念 |
| |
| +----------------------------------------------+ |
| | 1. IoC/DI 原理 | |
| | 构造器注入 | Setter注入 | 字段注入 | |
| | @Autowired 解析原理 (byType -> @Primary) | |
| +----------------------------------------------+ |
| | |
| +----------------------------------------------+ |
| | 2. Bean 生命周期 | |
| | 实例化 -> 属性赋值 -> Aware -> 前置 | |
| | -> 初始化 -> 后置(AOP) -> 就绪 -> 销毁 | |
| +----------------------------------------------+ |
| | |
| +----------------------------------------------+ |
| | 3. 循环依赖与三级缓存 | |
| | 三级缓存(L1/L2/L3) -> 延迟代理创建 | |
| +----------------------------------------------+ |
| | |
| +----------------------------------------------+ |
| | 4. 条件装配与作用域 | |
| | @Profile / @Conditional / 6种Scope | |
| +----------------------------------------------+ |
+----------------------------------------------------+三、子专题导航
| # | 主题 | 面试频率 | 核心内容 |
|---|---|---|---|
| **01.1-IoC与DI原理** | ⭐⭐⭐⭐⭐ | 控制反转动机、三种注入方式对比、@Autowired 解析原理 | |
| **01.2-Bean生命周期** | ⭐⭐⭐⭐⭐ | 从 BeanDefinition 到销毁的完整生命周期、AOP 代理生成时机 | |
| **01.3-循环依赖与三级缓存** | ⭐⭐⭐⭐⭐ | 三级缓存数据结构、为何不用二级、构造器注入循环依赖 | |
| **01.4-条件装配与作用域** | ⭐⭐⭐⭐ | 6种作用域、@Profile、@ConditionalOnXxx、@Lazy 代理原理 |
四、核心考点速记
考点 1:三级缓存解决循环依赖
一级缓存 singletonObjects -> 完整 Bean 二级缓存 earlySingletonObjects -> 半成品(提前暴露) 三级缓存 singletonFactories -> ObjectFactory(延迟代理) 关键:三级缓存解决"延迟代理创建"——无循环依赖不提前创建代理。
考点 2:Bean 生命周期中 AOP 时机
AOP 代理在 postProcessAfterInitialization 阶段生成
考点 3:构造器注入 vs 字段注入
- 构造器注入:不可变性、必填依赖、易测试 -> Spring 推荐
- 字段注入:代码简洁但难测试、无法做 final -> 不推荐
📚 相关板块
- **AOP 板块** — AOP 代理在 Bean 生命周期后置处理中生成
- **事务管理板块** — 声明式事务基于 AOP 实现
- **进阶源码板块** — refresh() 12 步源码详解
📚 相关链接
- **Spring文库设计文档** — 文库设计总纲