SringBoot的启动原理,保姆级带你认识,让面试管对你刮目相看

SringBoot的启动原理,保姆级带你认识,让面试管对你刮目相看

一,介绍

graph TD;
A[启动类] --> B[SpringApplication.run()]
B --> C[创建SpringApplication实例]
C --> D[初始化应用上下文]
D --> E[加载应用配置]
E --> F[执行自定义初始化器]
F --> G[执行ApplicationContextInitializer的initialize方法]
G --> H[准备上下文环境]
H --> I[加载配置源(默认为application.properties)]
I --> J[解析配置源]
J --> K[将解析结果存到Environment对象中]
K --> L[执行自定义属性源加载器]
L --> M[执行SpringApplicationListeners]
M --> N[执行ApplicationStartingEvent事件监听器]
N --> O[创建应用上下文]
O --> P[注册ShutdownHook]
P --> Q[准备上下文环境]
Q --> R[执行ApplicationContextInitializer的initialize方法]
R --> S[执行SpringApplicationListeners]
S --> T[执行ApplicationEnvironmentPreparedEvent事件监听器]
T --> U[装载BeanDefinition]
U --> V[执行SpringApplicationListeners]
V --> W[执行ApplicationContextInitializedEvent事件监听器]
W --> X[刷新应用上下文]
X --> Y[执行SpringApplicationListeners]
Y --> Z[执行ApplicationStartedEvent事件监听器]
Z --> A1[执行CommandLineRunner和ApplicationRunner接口的run方法]

二详细介绍

当我们启动 Spring Boot 应用程序时,Spring Boot 会按照一定的顺序执行一系列的操作,以完成应用程序的初始化和启动。下面是 Spring Boot 启动原理的详细步骤:

  1. 启动类中调用 SpringApplication.run() 方法,启动 Spring Boot 应用程序。

  2. 创建 SpringApplication 实例,对应用程序做一些初始化工作。这包括设置应用程序的类加载器、初始化默认的异常处理器等。

  3. 初始化应用上下文,即创建 ApplicationContext 对象。应用上下文是 Spring 框架的核心容器,负责管理和组织 Bean 对象。通过调用 SpringApplicationcreateApplicationContext() 方法,根据环境配置和应用类型来创建对应的应用上下文。

  4. 加载应用配置,默认配置文件为 application.propertiesSpringApplication 会通过 SpringApplication 的静态方法从默认位置加载配置文件,如 classpath:application.properties 或者 classpath:application.yml

  5. 执行自定义初始化器,即执行实现了 ApplicationContextInitializer 接口的类中的 initialize() 方法。这些初始化器可以在应用上下文创建之前对其进行自定义操作,比如修改配置、添加属性源等。

  6. 准备上下文环境,即为 Environment 对象初始化属性源,解析配置源,并将解析结果存储到 Environment 对象中。Environment 是一个抽象接口,Spring Boot 使用 StandardEnvironment 来实现它。在准备上下文环境时,应用程序会加载并解析配置文件,并将解析结果存储在 Environment 中。

  7. 执行自定义属性源加载器,即执行实现了 PropertySourceLoader 接口的类中的 load() 方法。自定义属性源加载器可以用来加载额外的属性源,比如数据库、远程配置中心等。

  8. 执行 SpringApplicationListeners,即执行实现了 SpringApplicationListener 接口的类中的 onApplicationEvent() 方法。这些监听器可以在应用程序的不同阶段进行监听和处理,比如在应用程序启动前后执行一些操作。

  9. 执行 ApplicationStartingEvent 事件监听器。这是一个特殊的事件,用于通知监听器应用程序即将开始启动。

  10. 创建应用上下文,即根据配置创建对应的 ApplicationContext 对象。Spring Boot 支持多种类型的应用上下文,如 AnnotationConfigApplicationContextClassPathXmlApplicationContext 等。具体的应用上下文类型由环境配置决定。

  11. 注册 ShutdownHook,在 JVM 关闭时回调关闭方法。这样可以确保应用程序在正常关闭之前完成必要的清理工作。

  12. 准备上下文环境,即为 Environment 对象初始化属性源,解析配置源,并将解析结果存储到 Environment 对象中。

  13. 执行 ApplicationContextInitializerinitialize() 方法。这里是再次执行自定义初始化器的机会,可以对应用程序上下文进行更多的自定义操作。

  14. 执行 SpringApplicationListeners,即执行实现了 SpringApplicationListener 接口的类中的 onApplicationEvent() 方法。这些监听器可以对应用程序上下文进行更多的监听和处理。

  15. 执行 ApplicationEnvironmentPreparedEvent 事件监听器。这个事件通知监听器应用程序环境已准备好,可以进行进一步的配置。

  16. 装载 BeanDefinition,即将配置文件中的 bean 装载到 ApplicationContext 中。在这一步中,Spring Boot 会扫描应用程序的类路径,根据配置文件中的信息,创建对应的 BeanDefinition,并将其注册到应用上下文中。

  17. 执行 SpringApplicationListeners,即执行实现了 SpringApplicationListener 接口的类中的 onApplicationEvent() 方法。这些监听器可以在装载 BeanDefinition 的过程中进行监听和处理。

  18. 执行 ApplicationContextInitializedEvent 事件监听器。这个事件通知监听器应用程序上下文已初始化完成。

  19. 刷新应用上下文,即完成 ApplicationContext 的初始化工作。在刷新过程中,Spring Boot 会执行一系列的生命周期回调方法,包括初始化 Bean、依赖注入、后置处理等。

  20. 执行 SpringApplicationListeners,即执行实现了 SpringApplicationListener 接口的类中的 onApplicationEvent() 方法。这些监听器可以在应用上下文刷新过程中进行监听和处理。

  21. 执行 ApplicationStartedEvent 事件监听器。这个事件通知监听器应用程序已启动。

  22. 执行 CommandLineRunnerApplicationRunner 接口的 run() 方法。这些接口可以在应用程序启动完成后执行一些特定的任务,比如初始化数据、启动定时任务等。

通过这些步骤,Spring Boot 将应用程序初始化并启动起来。开发人员可以根据需要进行自定义配置和扩展,以实现更加灵活和高效的应用程序。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_49841284/article/details/134818096