SpringApplication 的 run 方法是 Spring Boot 应用启动的核心方法,它负责启动 Spring 应用上下文,并处理各种启动阶段的细节。
以下是 run 方法的核心流程:
- 设置当前 Spring Application 实例的属性,例如应用上下文类名、web环境标志等。
- 通过 SpringFactoriesLoader 查找并加载 classpath 下 META-INF/spring.factories 文件中的自动配置类。
- 配置启动环境,例如设置 JVM 系统属性、环境变量等。
- 创建事件监听器,并发布应用启动的相关事件。
- 启动监听器,监听相关事件。
- 创建 ApplicationContext。
- 刷新 ApplicationContext,这一步包括 Bean 定义、Bean 的初始化等。
- 再一次刷新上下文,处理任何 Bean 工厂后处理器。
- 启动完成后,发布应用启动完成的事件。
以下是一个简化的 run 方法代码示例:
public static ConfigurableApplicationContext run(Object source, String... args) {
// 实例化SpringApplication
SpringApplication app = new SpringApplication(source);
// 设置默认属性
app.setDefaultProperties(defaultProperties);
// 创建并配置环境
ConfigurableEnvironment environment = new StandardEnvironment();
app.prepareEnvironment(environment, args);
// 创建上下文
ConfigurableApplicationContext context = new AnnotationConfigApplicationContext(app.getSources().toArray(new Class[0]));
// 刷新上下文
app.refresh(context);
// 发布启动完成事件
app.publishEvent(new ApplicationStartedEvent(new SpringApplication(), args));
return context;
}
这个示例省略了许多细节,但足以展示核心流程。在实际的 Spring Boot 应用中,run 方法会更加复杂,包含了许多健壮性检查、条件注解处理和环境适配等功能。