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

Spring Boot启动过程?

目录

1. 启动入口

2. SpringApplication 初始化

3. 准备环境

4. 创建应用上下文(ApplicationContext)

5. 准备应用上下文

6. 刷新应用上下文

7. 启动 Web 服务器(若为 Web 应用)

8. 发布 ApplicationStartedEvent 事件

9. 执行 Runner

10. 发布 ApplicationReadyEvent 事件


1. 启动入口

Spring Boot 应用的启动从 main 方法开始,main 方法通常位于一个带有 @SpringBootApplication 注解的类中。@SpringBootApplication 是一个组合注解,它包含了 @Configuration(标识该类为配置类,可定义 Bean 等配置)、@EnableAutoConfiguration(开启自动配置功能,依据项目依赖自动配置相关组件)和 @ComponentScan(用于扫描指定包及其子包下的组件,如 @Component@Service@Repository@Controller 等注解标注的类)。示例代码如下:

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

2. SpringApplication 初始化

SpringApplication.run() 方法会创建一个 SpringApplication 实例,并调用其 run 方法。该实例的初始化过程包含以下关键步骤:

  • 推断应用类型:依据类路径上的依赖来判断应用类型,比如包含 spring-boot-starter-web 依赖则推断为 Servlet 应用,若包含相关响应式编程依赖则推断为 Reactive 应用等。
  • 设置初始化器(Initializers):通过 SpringFactoriesLoader 从 META-INF/spring.factories 文件中加载并应用 ApplicationContextInitializer。这些初始化器可在应用上下文创建前对其进行定制化配置,例如设置属性源等。
  • 设置监听器(Listeners):同样借助 SpringFactoriesLoader 加载并应用 ApplicationListener,用于监听应用启动过程中的各类事件,如环境准备完成事件、应用上下文初始化事件等,以便在不同阶段执行相应逻辑。
  • 推断主应用类:通过堆栈跟踪的方式推断出主应用类,即包含 main 方法且带有 @SpringBootApplication 注解的类。

3. 准备环境

在 run 方法中,Spring Boot 会进行应用环境(Environment)的准备工作,具

http://www.dtcms.com/a/39201.html

相关文章:

  • C语言 第一章 认识C语言
  • HD接口 和HDMI接口是一个意思么
  • python-leetcode-划分字母区间
  • 子组件如何通过v-model实现数据的双向绑定
  • 互联网怎样利用人性-思维导图-markdown
  • Selenium 调用模型接口实现功能测试
  • C++ Primer 成员访问运算符
  • python学习五
  • 深入理解 并查集LRUCaChe
  • CUDA编程:对线程模型的理解
  • HDFS扩缩容及数据迁移
  • 使用 LangChain 和 Milvus 构建测试知识库
  • Instagram 的隐私政策更新:用户如何应对这些变化?
  • ARM32汇编 -- align 指令说明及示例
  • wordpress按分类ID调用最新、推荐、随机内容
  • Junit框架缺点
  • 计算机毕业设计 ——jspssm506Springboot 的旧物置换网站
  • AI大模型-提示工程学习笔记20-多模态思维链提示
  • 计算机网络-双绞线制作
  • ZIP64扩展和普通ZIP文件有什么区别?
  • [免单统计]
  • 【Python爬虫(89)】爬虫“反水”:助力数字版权保护的逆向之旅
  • 解决uniapp二次打包的安卓APP安装到物理手机后,部分页面无法访问的问题
  • SpringBoot——生成Excel文件
  • 基于 C++ Qt 的 Fluent Design 组件库 QFluentWidgets
  • python-文件系统(1)
  • 设计模式的引入
  • C语言 第一章(3)
  • NLP学习记录十:多头注意力
  • 二叉树中的深搜(典型算法思想)—— OJ例题算法解析思路