09 — 进阶与源码
定位: Spring 框架核心源码深度剖析——从容器启动到事件机制 面试高频度: ⭐⭐⭐⭐
一、板块在体系中的位置
+----------------------------------------------------+
| 进阶源码在 Spring 体系中的位置 |
| |
| 01. IoC 容器 (核心源码) -> 09. 进阶源码 (本板块) |
| 02. AOP (代理源码) -> | |
| 03. 事务管理 (事务源码) -> | |
| v |
| 09.1 refresh() 12步 (IoC 容器启动源码) |
| 09.2 @Configuration 增强 + @Import (配置解析源码) |
| 09.3 事件机制 (观察者模式源码) |
| 09.4 异步与定时任务 (@Async/@Scheduled 源码) |
+----------------------------------------------------+二、子专题导航
| # | 主题 | 面试频率 | 核心内容 |
|---|---|---|---|
| **09.1-refresh()启动流程** | ⭐⭐⭐⭐⭐ | AbstractApplicationContext.refresh() 12步详解 | |
| **09.2-@Configuration增强与@Import** | ⭐⭐⭐⭐ | Full vs Lite 模式、@Import 三种方式、@Enable* 原理 | |
| **09.3-事件机制** | ⭐⭐⭐⭐ | ApplicationEvent/Listener/Multicaster、@EventListener、@TransactionalEventListener | |
| **09.4-异步任务与定时任务** | ⭐⭐⭐ | @Async 源码、@Scheduled 配置、线程池配置 |
三、核心面试题
refresh()方法的 12 步中,哪一步最关键?为什么?- Spring 如何推断使用哪个构造方法实例化 Bean?
- @Configuration 类加
final关键字会怎样?Full 模式和 Lite 模式的区别? - @Import 的三种方式分别适用什么场景?
- BeanFactoryPostProcessor 和 BeanPostProcessor 的异同?
- FactoryBean 的典型应用场景?如何获取 FactoryBean 本身而不是其产品?
- Spring 事件机制是同步还是异步?如何改为异步?
- @Scheduled 和 @Async 组合使用的注意点?
- @TransactionalEventListener 和 @EventListener 的区别?
四、相关板块
- **IoC 容器** — refresh() 的核心产物
- **AOP** — @Configuration CGLIB 增强
- **测试与质量** — 测试异步方法
📚 相关链接
- **Spring文库设计文档** — 文库设计总纲