前言
在前文中,我们了解了应用上下文、Bean 工厂以及 Bean 定义的核心组件功能。接下来,我们将深入探讨应用上下文的构造方法。
SpringBoot 版本 2.7.18 中,SpringApplication 的 run 方法执行逻辑包含创建应用程序上下文这一步骤。本文将详细介绍这一环节的实现细节。
// SpringApplication 类方法 public ConfigurableApplicationContext run(String... args) {
// ... 省略部分代码 ...
// 6. 创建应用程序上下文
context = createApplicationContext();
// ... 省略后续步骤 ...
}
源码入口
核心内容在于 new AnnotationConfigServletWebServerApplicationContext() 的调用。
无参构造函数如下:
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 即 Application 上下文本身,用于构建内部的读取器和扫描器。
一、初始化注解 Bean 定义读取器
AnnotatedBeanDefinitionReader 的构造过程主要涉及三个关键点:获取注册表、获取环境对象、注册注解配置处理器。


