1. SpringBoot启动流程全景解析
SpringBoot 3.x的启动过程就像一台精密的瑞士钟表,各个组件在特定时机精准咬合。与传统的Spring应用相比,SpringBoot通过约定优于配置的理念,将原本需要手动编写的XML配置和样板代码转化为自动化流程。这个自动化魔法始于main()方法,但背后的机制远比表面看到的复杂。
启动过程的核心在于SpringApplication这个"总指挥"类。当你执行SpringApplication.run()时,实际上触发了以下关键阶段:
- 初始化阶段:准备运行环境、推断应用类型
- 监听器配置:加载META-INF/spring.factories中的监听器
- 上下文准备:创建并配置ApplicationContext
- 刷新阶段:最核心的IoC容器初始化
- 后处理阶段:执行Runner接口实现
整个过程通过事件驱动机制串联,共涉及12种内置事件类型,每个事件都标志着生命周期的重要转折点。理解这些事件触发时机,是掌握启动流程的关键。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 启动流程深度拆解
2.1 初始化阶段:SpringApplication实例化
创建SpringApplication实例时,会通过SpringFactoriesLoader加载META-INF/spring.factories中定义的:
- ApplicationContextInitializer
- ApplicationListener
这里有个容易踩坑的点:SpringBoot 3.x对spring.factories的加载机制做了优化。现在推荐使用META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件来声明自动配置类,但老方式仍然兼容。
java复制// 典型初始化代码示例
public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
this.resourceLoader = resourceLoader;
this.primarySources = new LinkedHash
