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

SpringBoot 启动过程

Spring Boot 是构建在 Spring 框架之上的项目,它通过简化配置和内置的开发工具,帮助开发者快速创建基于 Spring 的应用。Spring Boot 的主要目的是减少样板代码和配置,使得开发者能够专注于业务逻辑。

它的主要启动逻辑都源自于它的主启动类注解上:@SpringBootApplication,其中包含了三个注解来实现以下功能:
@Configuration 注解类标识这个类可以使用Spring IoC容器作为bean定义的来源。
@ComponentScan 的功能其实就是自动扫描并加载符合条件的组件,最终将这些bean定义加载到IoC容器中。
@EnableAutoConfiguration 将所有符合自动配置条件的bean定义加载到IoC容器,自动配置好tomcat、springmvc、web常见功能,初始化容器、应用监听器。

Spring Boot 的启动过程主要围绕 SpringApplication.run() 展开,其核心是 SpringApplication 初始化、环境准备、ApplicationContext 创建、Bean 加载与依赖注入、事件监听 等。

Spring Boot 启动的完整流程

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

核心步骤如下:

1. 创建 SpringApplication 对象

调用 new SpringApplication(primarySources),完成:

  • 推断应用类型(Servlet、Reactive、None)
  • 加载 ApplicationContextInitializer(初始化 ApplicationContext
  • 加载 ApplicationListener(监听 Spring Boot 事件)
  • 确定主类(包含 main 方法的 @SpringBootApplication 类)

2. 执行 run() 方法

SpringApplication.run() 触发 Spring Boot 核心启动流程:

① 启动 SpringApplicationRunListeners
  • 加载 META-INF/spring.factories 里的 SpringApplicationRunListener
  • 触发 starting() 事件(日志、监控初始化)
② 构建 ApplicationEnvironment
  • 解析 application.properties / application.yml
  • 处理 命令行参数环境变量系统属性
③ 创建 ApplicationContext

根据应用类型创建:

  • Web 应用:AnnotationConfigServletWebServerApplicationContext
  • 非 Web 应用:AnnotationConfigApplicationContext

3. 准备 ApplicationContext

① 调用 ApplicationContextInitializer
  • 允许开发者自定义 ApplicationContext 初始化逻辑
② 加载 BeanDefinition
  • 解析 @ComponentScan 扫描的 Bean
  • 解析 @Configuration 解析 @Bean 方法
  • 解析 spring.factories 里的 自动配置类
BeanFactoryPostProcessor 执行
  • 修改 Bean 定义(如 @ConditionalOnMissingBean 处理)
  • 解析 @ConfigurationProperties

4. refresh() 刷新 ApplicationContext

① 注册 BeanPostProcessor
  • AutowiredAnnotationBeanPostProcessor 处理 @Autowired
  • CommonAnnotationBeanPostProcessor 处理 @Resource
② 实例化单例 Bean
  • 解析 @Autowired 依赖注入
  • @PostConstruct 方法执行
  • 若有 AOP,生成代理对象
③ 启动 Web 服务器
  • Tomcat / Jetty / Undertow
  • 注册 DispatcherServlet

5. 执行 ApplicationRunner / CommandLineRunner

  • ApplicationRunner 处理 run(ApplicationArguments args)
  • CommandLineRunner 处理 run(String... args)

6. 触发 ApplicationReadyEvent

  • ApplicationListener 监听 ApplicationReadyEvent
  • 说明 Spring Boot 启动完成,正式运行

总结

  1. 初始化 SpringApplication
  2. 构建 ApplicationContext
  3. 解析配置 & Bean 加载
  4. refresh() 刷新上下文
  5. 启动 Web 容器
  6. 执行 ApplicationRunner
  7. 触发 ApplicationReadyEvent

这一过程确保 Spring Boot 应用能够 自动配置、加载 Bean、运行 Web 服务器,并触发各种事件。


http://www.mrgr.cn/news/94752.html

相关文章:

  • 蓝桥杯每日一题——Acwing 5438. 密接牛追踪2
  • 【大模型实战篇】使用GPTQ量化QwQ-32B微调后的推理模型
  • C++特性——智能指针
  • 【leetcode hot 100 146】LRU缓存
  • 玩转云服务器——阿里云操作系统控制台体验测评
  • Android开源库——RxJava和RxAndroid
  • Python条件语句
  • uniapp 多环境配置打包,比较优雅的解决方案,全网相对优解
  • 基于Springboot+服务器磁盘的本地文件存储方案
  • [项目]基于FreeRTOS的STM32四轴飞行器: 六.2.4g通信
  • 文档搜索引擎
  • 栈区、堆区、静态区
  • LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 论文阅读
  • 解决Windows版Redis无法远程连接的问题
  • python爬虫Scrapy(6)之增量式
  • itsdangerous加解密源码分析|BUG汇总
  • Linux实时内核稳定性案例
  • Java:引用其他类的方法
  • Spring bean的作用域详解
  • Spring面试:Spring,SpringMVC,SpringBoot