Spring & Spring Boot 专题:IoC、AOP、事务、自动装配、常用注解与源码
这是一张 Spring/Spring Boot 的学习地图:先立住 IoC 与 AOP 两根支柱,再沿 Bean、事务、MVC、自动装配逐层深入,最后用设计模式和源码把零散知识连成网。适合系统学习框架的开发者,也适合面试前自查短板。
地图总览
整个专题可以分成四层:
- 核心思想层:IoC 与 AOP,回答「Spring 到底解决了什么问题」。
- 容器机制层:Bean 的生命周期、作用域、循环依赖、依赖注入方式与常用注解。
- 企业能力层:声明式事务、Spring MVC 请求链路、
@Async异步、事件机制。 - Boot 与原理层:自动装配、Starter 体系、设计模式与源码阅读。
第一层:IoC 与 AOP
IoC 把对象的创建与依赖组装从代码移到容器,换来低耦合与统一管理;AOP 用动态代理把事务、日志、权限等横切逻辑收敛到切面。学这两个概念不能满足于背定义——要能讲清代理怎么生成、调用链怎么走、什么情况下增强会失效。后续所有「注解不生效」的问题,答案几乎都藏在第一层的代理模型里。
第二层:Bean 与容器
Bean 是容器管理的对象,这一层要掌握四件事:注册方式(@Component 扫描与 @Bean 方法)、注入方式(构造器注入优先)、作用域(singleton 与 prototype 的差异及线程安全边界)、生命周期(实例化、属性填充、初始化、销毁四段及 BeanPostProcessor 扩展点)。循环依赖是本层的综合考题:三级缓存为什么能解开 Setter 注入的环、为什么解不开构造器的环,值得对照 doCreateBean 源码走一遍。
第三层:事务、MVC 与异步
声明式事务的重点是传播行为、回滚规则、失效场景三件套;Spring MVC 的重点是 DispatcherServlet 到 HandlerMapping、HandlerAdapter 再到异常解析器的请求链路;@Async 的重点是线程池配置与代理边界。三块的共性在于都建立在代理或容器基础设施之上,失效场景可以互相印证——学会一个,另外两个的坑也能举一反三。
第四层:Spring Boot 与原理进阶
Spring Boot 不改写 Spring 的任何机制,而是用条件装配、@EnableAutoConfiguration 和 Starter 依赖管理把配置成本压到最低。理解自动装配后再回头看「为什么引入一个 starter 就有了默认数据源」,会比死记结论牢固得多。设计模式(工厂、代理、模板方法等)与核心源码适合放在最后,作用是把前三层知识串成体系,而不是入门第一步。
建议路径
- 先用面试题清单自测,标出薄弱环节;
- 按层推进:IoC/AOP → Bean → 事务/MVC → Boot;
- 每层配一个最小可运行示例,刻意制造一次「失效」(自调用、受检异常、构造器循环依赖),观察现象再解释原因;
- 最后读关键源码(
doCreateBean、事务拦截器、自动配置的条件评估),把结论和实现一一对应。
高频自检清单
- 什么是 IoC?构造器注入为什么优于字段注入?
- Bean 生命周期的四个阶段各做了什么?
- 三级缓存解决哪类循环依赖,解决不了哪类?
@Transactional什么时候不回滚?- Spring MVC 一次请求经过哪些核心组件?
@Async为什么有时不生效?- Spring Boot 自动装配的条件是如何评估的?
能不看资料把这些问题讲清楚,这一专题就算立住了。

