444 字
2 分钟
Spring 容器启动过程:从 BeanDefinition 到 AOP 代理
Spring 启动可以概括为:
创建容器 → 注册 BeanDefinition → BeanFactory 后置处理器→ Bean 后置处理器 → 实例化 → 依赖注入 → 初始化→ AOP 代理 → 容器启动完成主要阶段
- 创建并刷新 ApplicationContext:创建 IoC 容器,加载配置和环境信息。
- 解析并注册 BeanDefinition:通过组件扫描和配置类发现 Bean,将定义信息注册到 BeanFactory。
- 执行 BeanFactory 后置处理器:在实例化前修改或处理 BeanDefinition。
- 注册 Bean 后置处理器:为 Bean 创建和初始化过程提供扩展能力。
- 实例化 Bean:通常预先创建非懒加载的单例 Bean;依赖关系和后置处理器也可能引发提前创建,不能把所有对象理解为同一个时间点批量实例化。
- 依赖注入:解析依赖关系,完成
@Autowired等注入。 - 初始化 Bean:执行 Aware 回调、
@PostConstruct、InitializingBean和相关后置处理逻辑。 - 创建 AOP 代理:通常由 Bean 后置处理器在初始化处理期间为符合条件的 Bean 创建代理,例如事务或切面增强;循环依赖的提前引用等场景存在不同路径。
- 容器启动完成:发布刷新完成事件,ApplicationContext 进入可用状态。
BeanFactory 与 ApplicationContext
BeanFactory 是 IoC 容器的基础接口,负责 Bean 的创建、获取、依赖注入和生命周期管理。ApplicationContext 在此基础上增加了事件发布、国际化、资源加载和环境配置等能力,因此实际项目中更常直接使用 ApplicationContext。
这篇关注容器整体启动。单个 Bean 的初始化与销毁回调顺序、三级缓存和代理提前引用,接着读 Bean 生命周期与循环依赖。
Spring 容器启动过程:从 BeanDefinition 到 AOP 代理
https://blog.xqcherry.top/posts/interview/java/spring-container-startup/ 目录