当前位置: 首页 > news >正文

SpringBoot的启动流程

好的 👍,我来给你梳理一下 Spring Boot 启动流程,从 main 方法开始到整个容器完成启动的核心过程。


1. 启动入口

典型的 Spring Boot 应用入口:

@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

SpringApplication.run(...) 是启动的核心。


2. 启动流程大图(简化版)

main() →SpringApplication.run() →① 构建 SpringApplication 对象② 执行 run()├─ 准备阶段(环境 Environment)├─ 创建并准备容器(ApplicationContext)├─ 刷新容器(refresh)├─ 执行所有 runners(CommandLineRunner / ApplicationRunner)└─ 完成启动

3. 详细流程

第一阶段:创建 SpringApplication

  • new SpringApplication(...)

  • 主要工作:

    • 确定应用类型(SERVLETREACTIVENONE
    • 加载 ApplicationContextInitializer(上下文初始化器)
    • 加载 ApplicationListener(事件监听器)
    • 推断主类(通过 main 方法所在的类)

第二阶段:执行 run()

核心逻辑在 SpringApplication#run 方法里。

(1) 启动计时器

  • StopWatch 记录启动耗时

(2) 启动监听器(SpringApplicationRunListeners)

  • 发布事件 ApplicationStartingEvent,通知监听器:应用启动了

(3) 创建/配置 Environment(环境)

  • 负责加载配置源(系统属性、环境变量、application.properties/yml 等)
  • 发布 ApplicationEnvironmentPreparedEvent 事件

(4) 打印 Banner

  • 如果 resources/banner.txt 存在,打印启动 Banner

第三阶段:创建并准备容器

(1) 创建 ApplicationContext

  • 根据应用类型,创建对应容器:

    • Web 应用 → AnnotationConfigServletWebServerApplicationContext
    • Reactive 应用 → AnnotationConfigReactiveWebServerApplicationContext
    • 非 Web → AnnotationConfigApplicationContext

(2) 初始化 ApplicationContext

  • Environment 设置到容器中
  • 应用所有 ApplicationContextInitializer
  • 发布 ApplicationContextInitializedEvent

第四阶段:刷新容器(refresh)

这个是最重要的环节,由 SpringApplication#refreshContext 调用 Spring 容器的标准生命周期方法 context.refresh()

主要做的事:

  1. BeanDefinition 加载:扫描 @ComponentScan、导入配置类、加载自动配置类(@EnableAutoConfiguration
  2. BeanFactoryPostProcessor 执行:允许修改 Bean 定义
  3. BeanPostProcessor 注册:Bean 初始化前后执行增强
  4. 单例 Bean 实例化
  5. WebServer 创建(比如内置 Tomcat 启动)
  6. 发布 ContextRefreshedEvent

第五阶段:执行 Runners

  • 查找并执行 ApplicationRunnerCommandLineRunner
  • 用于在应用启动完成后,执行一些初始化逻辑

第六阶段:启动完成

  • 发布 ApplicationReadyEvent
  • 表示应用完全启动,可以对外提供服务

4. 总结流程(关键事件顺序)

  1. ApplicationStartingEvent → 应用开始启动
  2. ApplicationEnvironmentPreparedEvent → 环境准备完成
  3. ApplicationContextInitializedEvent → 上下文初始化
  4. ApplicationPreparedEvent → Bean 定义加载完成
  5. ContextRefreshedEvent → 容器刷新完成
  6. ApplicationStartedEvent → 应用已启动
  7. ApplicationReadyEvent → 应用准备就绪

5. 总结

一句话概括 Spring Boot 启动流程

先创建 SpringApplication → 初始化环境 → 创建并刷新容器 → 加载自动配置和 Bean → 启动内置 Web 容器 → 执行 Runner → 发布就绪事件。


http://www.sczhlp.com/news/67921/

相关文章:

  • Spring MVC 的源码流程解析
  • mybatis框架的源码流程解析
  • discuz企业网站模板电脑咋建网站
  • 旅游网站建设技术有哪些内容重庆网络公司产品设计
  • php网站开发公司电子商务平台经营者通过交易规则
  • 网站推广常用的方法中山公众号平台商场网站建设
  • 做pc端网站好么辽宁省住房和建设厅官方网站
  • 网站推广有必要吗wordpress做小说网站
  • 同一ip网站抖音电脑网页版入口
  • wordpress整站搬家联系方式 响应式网站
  • 海外永久网站网站建设宣传语怎么写
  • 成都网站建设 冠辰足球积分排行榜最新
  • 学习不是脑子里塞满知识的行为
  • C# Avalonia 12- Drawing - RadialGradient
  • 网站套餐表格模板网站建设丿金手指谷哥14
  • 网站建设对接流程图课程资源网站的建设
  • 宁波网站建设优化企业推荐个股期权网站开发
  • 中国建设银行陕西省分行网站google网站管理员工具 下载
  • 做网站注册哪类商标内蒙古住房与建设官方网站
  • 做流量的网站应该注意什么合肥装饰公司前十名
  • 百度网站加v百度权重2的网站
  • 网站制作便宜学设计用什么笔记本电脑好
  • 建设银行纪念币网站上海网站制作公司联系方式
  • C# Avalonia 12- Drawing - GradientText
  • 傻瓜式 建网站网站开发结束语
  • 视频直播网站开发流程自己做的网站加载很难
  • 外贸 网站 源码wordpress优化服务器
  • 电子商务网站建设认识做带支付功能的网站
  • 智能云建站平台WordPress添加用户组
  • 咸宁网站设计公司网站建设10个基本步骤