网站首页 > 博客文章 正文
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实现扩展点(如启动日志、初始化检查)
猜你喜欢
- 2025-07-23 Spring IoC Container 原理解析(spring中ioc的作用与原理)
- 2025-07-23 Spring之底层架构核心概念解析(spring底层设计模式)
- 2025-07-23 深入理解 JSR 303:数据校验在 Spring Boot 中的应用
- 2025-07-23 Springboot集成Kafka原理(kafka结合springboot)
- 2025-07-23 Spring如何加载「IOC容器」以及「装载Bean」源码解读
- 2025-07-23 Spring Security 自动踢掉前一个登录用户,一个配置搞定
- 2025-07-23 Spring Boot 控制反转(IoC)全面解析:从基础到高级实践
- 2025-07-23 spring cloud Alibaba参考的中文文档
- 2025-07-23 SpringBoot中6种拦截器使用场景(springboot拦截器放行)
- 2025-07-23 Java开发200+个学习知识路线-史上最全(框架篇)
你 发表评论:
欢迎- 07-23Spring IoC Container 原理解析(spring中ioc的作用与原理)
- 07-23Spring之底层架构核心概念解析(spring底层设计模式)
- 07-23深入理解 JSR 303:数据校验在 Spring Boot 中的应用
- 07-23Springboot集成Kafka原理(kafka结合springboot)
- 07-23Spring如何加载「IOC容器」以及「装载Bean」源码解读
- 07-23Spring Security 自动踢掉前一个登录用户,一个配置搞定
- 07-23Spring Boot 控制反转(IoC)全面解析:从基础到高级实践
- 07-23spring cloud Alibaba参考的中文文档
- 最近发表
-
- Spring IoC Container 原理解析(spring中ioc的作用与原理)
- Spring之底层架构核心概念解析(spring底层设计模式)
- 深入理解 JSR 303:数据校验在 Spring Boot 中的应用
- Springboot集成Kafka原理(kafka结合springboot)
- Spring如何加载「IOC容器」以及「装载Bean」源码解读
- Spring Security 自动踢掉前一个登录用户,一个配置搞定
- Spring Boot 控制反转(IoC)全面解析:从基础到高级实践
- spring cloud Alibaba参考的中文文档
- Spring Boot执行过程(执行springboot的jar)
- SpringBoot中6种拦截器使用场景(springboot拦截器放行)
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- flutterrun (59)
- 系统设计图 (58)
- powershellfor (73)
- messagesource (71)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- qcombobox样式表 (68)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)