spring boot的启动过程
时间: 2025-01-04 17:28:15 浏览: 4
### Spring Boot 启动流程详解
#### SpringApplication 实例化
当应用程序启动时,`SpringApplication` 类被实例化。这个类负责引导应用的启动过程并管理其生命周期[^1]。
#### 调用 `run()` 方法
通过调用静态方法 `SpringApplication.run(Class primarySource, String... args)` 来触发整个启动序列。此操作会执行一系列的任务来设置环境、加载配置文件以及初始化上下文等必要工作[^2]。
#### 初始化监听器
在此阶段,系统将注册多个 `SpringApplicationRunListener` 接口实现者作为事件监听器。这些监听器用于监控不同阶段的状态变化并向外部发送通知消息,有助于扩展自定义行为或集成第三方服务。
#### 设置默认属性与解析命令行参数
程序接着读取内置和用户指定的各种属性源,并将其合并成最终的应用配置集;同时也会处理来自命令行输入的相关选项以便动态调整某些设定项。
#### 创建 ApplicationContext 容器
紧接着构建合适的 `ApplicationContext` 对象——这取决于所选模式(如 Web 或非Web),该容器将成为后续组件管理和依赖注入的基础平台。
#### 执行 BeanFactoryPostProcessor 和 BeanDefinitionRegistryPostProcessor
这两个处理器允许修改已存在的 bean definitions,在实际对象实例化之前完成特定逻辑的操作,比如替换占位符变量值或是增加额外功能特性支持。
#### 注册 CommandLineRunner 和 ApplicationRunner Beans
这两种类型的 beans 可以在所有其他常规beans都准备好之后被执行一次性的任务脚本或者业务逻辑代码片段,非常适合用来做数据迁移、缓存预热等工作。
#### 发布事件
在整个过程中不断广播各种各样的事件给已经订阅过的监听器们知晓当前进展状况,从而使得各个部分能够协同合作共同推进整体进程向前发展。
```java
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(MyApplication.class);
app.run(args); // 触发上述提到的一系列动作
}
}
```
阅读全文