什么网站的地图,泉州北京网站建设价格,营销型网站建设口碑好,实惠的福州网络推广Spring Boot 的启动流程是一个复杂且有序的过程#xff1a; 创建SpringApplication实例 — 调用run方法 — 启动完成(发布应用启动事件#xff0c;配置环境#xff0c;创建ApplicationContext#xff0c;准备ApplicationContext#xff0c;刷新ApplicationContext[【创建B…Spring Boot 的启动流程是一个复杂且有序的过程 创建SpringApplication实例 — 调用run方法 — 启动完成(发布应用启动事件配置环境创建ApplicationContext准备ApplicationContext刷新ApplicationContext[【创建BeanFactory,加载Bean定义,创建Bean实例,启动嵌入式服务器】发布应用就绪事件) — 异常处理 下面将详细拆解其各个阶段。
1. 启动入口
Spring Boot 应用的启动通常从一个带有 SpringBootApplication 注解的主类的 main 方法开始。SpringBootApplication 是一个组合注解包含了 Configuration、EnableAutoConfiguration 和 ComponentScan分别用于配置类、启用自动配置和组件扫描。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication
public class MySpringBootApplication {public static void main(String[] args) {SpringApplication.run(MySpringBootApplication.class, args);}
}2. 创建 SpringApplication 实例
在调用 SpringApplication.run 方法时首先会创建一个 SpringApplication 实例。这个实例负责配置和启动 Spring Boot 应用。在创建过程中会进行以下操作
推断应用类型判断应用是普通的 Servlet 应用、Reactive 应用还是其他类型。查找并加载初始化器ApplicationContextInitializer初始化器可以在 ApplicationContext 创建之前对其进行自定义配置。查找并加载监听器ApplicationListener监听器用于监听应用启动过程中的各种事件如应用启动、失败等。推断主类确定包含 main 方法的主类。
3. 调用 run 方法
SpringApplication 实例创建完成后会调用其 run 方法该方法包含了一系列关键步骤。
3.1 发布应用启动事件ApplicationStartingEvent
当 run 方法开始执行时会发布 ApplicationStartingEvent 事件通知所有注册的监听器应用正在启动。
3.2 配置环境ConfigurableEnvironment
创建环境对象根据应用类型创建相应的环境对象如 StandardServletEnvironment 或 StandardReactiveEnvironment。加载属性源从各种属性源如配置文件、系统属性、环境变量等加载配置属性。发布环境准备好事件ApplicationEnvironmentPreparedEvent通知监听器环境已经准备好。
3.3 创建 ApplicationContext
根据应用类型创建相应的 ApplicationContext 实例如 AnnotationConfigServletWebServerApplicationContext 用于 Servlet 应用AnnotationConfigReactiveWebServerApplicationContext 用于 Reactive 应用。
3.4 准备 ApplicationContext
设置环境将之前配置好的环境对象设置到 ApplicationContext 中。应用初始化器调用之前加载的初始化器对 ApplicationContext 进行自定义配置。发布上下文准备好事件ApplicationContextInitializedEvent通知监听器上下文已经初始化。加载 Bean 定义扫描并加载应用中的 Bean 定义。
3.5 刷新 ApplicationContext
调用 ApplicationContext 的 refresh 方法这是 Spring 框架的核心方法会完成以下重要操作
创建 BeanFactory创建 DefaultListableBeanFactory 用于管理 Bean 的创建和依赖注入。加载 Bean 定义将之前扫描到的 Bean 定义注册到 BeanFactory 中。创建 Bean 实例根据 Bean 的定义创建 Bean 实例并进行属性注入和初始化。启动嵌入式服务器如果是 Web 应用如 Tomcat、Jetty 等用于处理 HTTP 请求。
3.6 发布应用就绪事件ApplicationReadyEvent
当 ApplicationContext 刷新完成且嵌入式服务器启动成功后会发布 ApplicationReadyEvent 事件通知监听器应用已经准备好接受请求。
3.7 调用 CommandLineRunner 和 ApplicationRunner
如果应用中定义了实现 CommandLineRunner 或 ApplicationRunner 接口的 Bean会依次调用它们的 run 方法允许开发者在应用启动后执行一些自定义逻辑。
4. 启动完成
当上述步骤都执行完毕后Spring Boot 应用启动完成开始监听客户端请求提供服务。
5. 异常处理
在整个启动过程中如果发生异常会发布 ApplicationFailedEvent 事件通知监听器应用启动失败并打印详细的错误信息。
综上所述Spring Boot 的启动流程涉及多个阶段和事件通过事件机制和各种扩展点开发者可以在不同阶段对应用进行自定义配置和扩展。