Spring Boot 执行过程流程图
graph TD
A[启动 main 方法] --> B[创建 SpringApplication 实例]
B --> C[准备环境 Environment]
C --> D[创建 ApplicationContext]
D --> E[准备上下文]
E --> F[刷新上下文 refresh()]
F --> G[执行 BeanFactoryPostProcessor]
G --> H[注册 BeanPostProcessor]
H --> I[初始化 MessageSource]
I --> J[初始化事件广播器]
J --> K[注册监听器]
K --> L[完成 BeanFactory 初始化]
L --> M[完成上下文刷新]
M --> N[调用 Runner 接口]
N --> O[启动内嵌 Web 服务器]
O --> P[应用就绪]
subgraph 刷新上下文关键步骤
F --> G1[准备 BeanFactory]
G1 --> G2[执行 BeanFactoryPostProcessor]
G2 --> G3[注册 BeanPostProcessor]
G3 --> G4[初始化单例 Bean]
G4 --> G5[发布 ContextRefreshedEvent]
end
详细步骤说明:
- 启动 main 方法
- 执行SpringApplication.run(Application.class, args)
- 创建 SpringApplication 实例
- 加载META-INF/spring.factories中的配置初始化ApplicationContextInitializer和ApplicationListener
- 准备环境 (Environment)
- 加载配置(application.properties/yml)激活 Profiles(如 dev/test/prod)
- 创建 ApplicationContext
- 根据应用类型创建上下文(Servlet/Reactive)示例:AnnotationConfigServletWebServerApplicationContext
- 准备上下文
- 执行ApplicationContextInitializer注册主配置类(@SpringBootApplication注解类)
- 刷新上下文 (refresh())
- 核心阶段,包含以下子步骤:准备 BeanFactory(设置类加载器、表达式解析器)执行BeanFactoryPostProcessor(解析@Configuration,扫描@Component)注册BeanPostProcessor(处理依赖注入、AOP 等)初始化单例 Bean(依赖注入、@PostConstruct回调)发布ContextRefreshedEvent事件
- 启动内嵌 Web 服务器
- 创建 Tomcat/Jetty/Undertow 实例部署 DispatcherServlet(Servlet 应用)
- 调用 Runner 接口
- 执行ApplicationRunner和CommandLineRunner
- 应用就绪
- 接收 HTTP 请求发布ApplicationReadyEvent
关键流程图解:
main()
│
├─> SpringApplication.run()
│ │
│ ├─> 初始化环境 (加载配置/Profiles)
│ │
│ ├─> 创建 ApplicationContext
│ │
│ └─> refreshContext() [核心]
│ │
│ ├─> prepareRefresh()
│ │
│ ├─> obtainFreshBeanFactory()
│ │
│ ├─> prepareBeanFactory()
│ │
│ ├─>
invokeBeanFactoryPostProcessors() // 解析配置类
│ │
│ ├─>
registerBeanPostProcessors() // 注册 Bean 处理器
│ │
│ ├─>
finishBeanFactoryInitialization() // 初始化单例 Bean
│ │
│ └─> finishRefresh() // 启动 Web 服务器
│
└─> 调用 Runners → 应用就绪
核心机制:
- Bean 生命周期控制:通过BeanPostProcessor实现 AOP、事务管理等
- 自动配置:@EnableAutoConfiguration触发spring.factories中的自动配置类
- 事件驱动:ApplicationEvent和ApplicationListener实现扩展点(如启动日志、初始化检查)