目录
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
)的准备工作,具