SpringBoot的启动流程?

Spring Boot 的启动流程可以分为以下几个主要步骤:

1. 初始化阶段

  • 引导类加载:Spring Boot 启动类通常是用 @SpringBootApplication 注解标注的类,该注解是一个复合注解,包含了 @SpringBootConfiguration@EnableAutoConfiguration@ComponentScan
  • 启动器类SpringApplication.run() 方法是 Spring Boot 应用启动的入口。它会创建一个 SpringApplication 对象,并调用它的 run 方法。

2. 配置阶段

  • SpringApplication 初始化SpringApplication 类进行初始化配置,包括设置 Web 应用类型、读取和解析应用配置文件(如 application.propertiesapplication.yml)、配置 Banner(启动标语)等。
  • 启动监听器:加载并调用所有实现了 ApplicationListener 接口的监听器。此时可以在 application.properties 配置文件中指定监听器。

3. 环境准备阶段

  • 准备环境SpringApplication 准备并配置应用运行的环境,包括设置系统属性、环境变量、解析配置文件等。
  • 创建并配置 Environment:根据不同的环境(如开发环境、生产环境)加载不同的配置文件。

4. 创建并刷新应用上下文

  • 创建 ApplicationContext:根据应用类型(如 Servlet Web、Reactive Web、普通应用)创建相应的 ApplicationContext 实例(如 AnnotationConfigServletWebServerApplicationContext)。
  • 注册所有的 Bean:扫描包路径,按照配置和自动装配机制,注册所有的 Spring Bean。
  • 自动配置:根据 @EnableAutoConfiguration 注解和相关的自动配置类,自动配置 Bean。这个过程会根据 META-INF/spring.factories 文件中的配置,加载各种自动配置类。

5. 启动内嵌服务器

  • 启动嵌入式 Web 服务器:如果是 Web 应用,Spring Boot 会启动一个嵌入式 Web 服务器(如 Tomcat、Jetty、Undertow)。
  • 注册 Servlet 和过滤器:将所有的 Servlet、过滤器、监听器注册到 Web 服务器中。

6. 应用运行阶段

  • 调用所有的 CommandLineRunnerApplicationRunner:在应用上下文刷新完成后,调用所有实现了 CommandLineRunnerApplicationRunner 接口的 Bean。
  • 应用开始接受请求:此时应用已经完全启动,开始接受和处理请求。

7. 关闭应用

  • 注册关闭钩子:Spring Boot 会注册一个 JVM 关闭钩子,在应用关闭时调用所有的 DisposableBean@PreDestroy 方法,执行清理工作。

上述流程是一个高层次的概述,实际的启动过程中包含了很多细节和复杂的内部机制,如条件装配、事件发布、上下文刷新等。Spring Boot 的设计目的是为了简化 Spring 应用的配置和启动,因此很多步骤都是自动化完成的,开发者可以专注于业务逻辑的实现。

相关推荐

  1. SpringBoot启动流程

    2024-07-13 18:12:02       20 阅读
  2. MCU启动流程

    2024-07-13 18:12:02       34 阅读
  3. SpringBoot程序启动流程解析

    2024-07-13 18:12:02       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 18:12:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 18:12:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 18:12:02       58 阅读
  4. Python语言-面向对象

    2024-07-13 18:12:02       69 阅读

热门阅读

  1. MyBatisPlus实现增删改查

    2024-07-13 18:12:02       18 阅读
  2. LeetCode 74, 228, 39

    2024-07-13 18:12:02       15 阅读
  3. Oracle字符集修改

    2024-07-13 18:12:02       22 阅读
  4. 力扣 哈希表刷题回顾

    2024-07-13 18:12:02       19 阅读
  5. C++之复合资料型态 第一部(参考 列举 指标)

    2024-07-13 18:12:02       20 阅读
  6. spring-cloud和spring-cloud-alibaba的关系

    2024-07-13 18:12:02       20 阅读
  7. 4层负载均衡和7层负载均衡

    2024-07-13 18:12:02       21 阅读
  8. 大话C语言:第31篇 指针和数组的关系

    2024-07-13 18:12:02       22 阅读
  9. 算法提高第二章 线段树基础

    2024-07-13 18:12:02       18 阅读
  10. django orm中value和value_list以及转成list

    2024-07-13 18:12:02       22 阅读