前言
在梳理完 SpringApplication.run 的整体执行逻辑后,我们聚焦到第 6 步:创建应用程序上下文。这一步是 Spring Boot 启动过程中承上启下的关键环节,它决定了后续 Bean 加载和 Web 容器初始化的基础环境。
源码入口
核心代码位于 createApplicationContext() 方法中,实际调用的构造函数如下:
// 6.创建应用程序上下文
context = createApplicationContext();
具体实现类为 AnnotationConfigServletWebServerApplicationContext,其无参构造方法初始化了两个核心组件:注解 Bean 定义读取器和类路径 Bean 定义扫描器。
public class AnnotationConfigServletWebServerApplicationContext
extends ServletWebServerApplicationContext implements AnnotationConfigRegistry {
// 用于读取注解的 Bean 定义读取器
private final AnnotatedBeanDefinitionReader reader;
// 用于扫描类路径并注册 Bean 定义的扫描器
private final ClassPathBeanDefinitionScanner scanner;
// 无参构造函数
public AnnotationConfigServletWebServerApplicationContext() {
// 初始化注解 Bean 定义读取器
this.reader = new AnnotatedBeanDefinitionReader(this);
// 初始化类路径 Bean 定义扫描器
this.scanner = new ClassPathBeanDefinitionScanner(this);
}
}
这里的 this 指向当前应用上下文实例,它实现了 BeanDefinitionRegistry 接口,因此可以直接作为注册表传递给内部组件。
一、初始化注解 Bean 定义读取器
AnnotatedBeanDefinitionReader 负责处理带有注解的配置类,其构造过程涉及三个关键步骤:获取注册表、获取环境对象、注册后置处理器。


