目录
4. 创建应用上下文(ApplicationContext)
8. 发布 ApplicationStartedEvent 事件
10. 发布 ApplicationReadyEvent 事件
1. 启动入口
Spring Boot 应用的启动从 main 方法开始,main 方法通常位于一个带有 @SpringBootApplication 注解的类中。@SpringBootApplication 是一个组合注解,它包含了 @Configuration(标识该类为配置类,可定义 Bean 等配置)、@EnableAutoConfiguration(开启自动配置功能,依据项目依赖自动配置相关组件)和 @ComponentScan(用于扫描指定包及其子包下的组件,如 @Component、@Service、@Repository、@Controller 等注解标注的类)。示例代码如下:
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
2. SpringApplication 初始化
SpringApplication.run() 方法会创建一个 SpringApplication 实例,并调用其 run 方法。该实例的初始化过程包含以下关键步骤:
- 推断应用类型:依据类路径上的依赖来判断应用类型,比如包含
spring-boot-starter-web依赖则推断为 Servlet 应用,若包含相关响应式编程依赖则推断为 Reactive 应用等。 - 设置初始化器(Initializers):通过
SpringFactoriesLoader从META-INF/spring.factories文件中加载并应用ApplicationContextInitializer。这些初始化器可在应用上下文创建前对其进行定制化配置,例如设置属性源等。 - 设置监听器(Listeners):同样借助
SpringFactoriesLoader加载并应用ApplicationListener,用于监听应用启动过程中的各类事件,如环境准备完成事件、应用上下文初始化事件等,以便在不同阶段执行相应逻辑。 - 推断主应用类:通过堆栈跟踪的方式推断出主应用类,即包含
main方法且带有@SpringBootApplication注解的类。
3. 准备环境
在 run 方法中,Spring Boot 会进行应用环境(Environment)的准备工作,具