您现在的位置是:首页 >其他 >SpringBoot 启动流程网站首页其他

SpringBoot 启动流程

JavaWizard-M 2024-06-29 18:01:03
简介SpringBoot 启动流程
  1. 概述

    SpringBoot 是一个基于 Spring 的框架,它通过自动配置和约定大于配置的方式,简化了 Spring 应用程序的开发和部署。在本文中,我们将会深入了解 Spring Boot 的启动流程,掌握 Spring Boot 应用程序是如何启动并初始化的。

  2. 构建环境

    在了解 Spring Boot 的启动流程之前,需要先理解 Spring Boot 的构建环境。Spring Boot 支持多种构建工具,包括 Maven 和 Gradle 等。一般来说,在使用 Maven 构建 Spring Boot 应用程序时,需要将 spring-boot-starter-parentspring-boot-dependencies 作为父项目添加到 pom.xml 中;而在使用 Gradle 时,则需要在 build.gradle 文件中引入相应的依赖。

  3. 主类定义

    Spring Boot 应用程序的入口是一个 Java 类,一般称为主类。主类需要添加 @SpringBootApplication 注解,该注解包含了 @EnableAutoConfiguration@ComponentScan@Configuration 三个注解。其中,@EnableAutoConfiguration 用于启用 Spring Boot 自动配置功能,@ComponentScan 用于指定要扫描的包,@Configuration 用于标注这是一个配置类。例如:

@SpringBootApplication
public class MyApp {
    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }
}
  1. 启动流程

    Spring Boot 应用程序的启动流程可以分为四个阶段:准备阶段、刷新上下文阶段、后置处理阶段和启动失败处理阶段。下面我们将逐一深入了解每个阶段的细节。

4.1 准备阶段

在准备阶段,Spring Boot 会创建一个 SpringApplication 对象,并对其进行配置。SpringApplication 是 Spring Boot 应用程序的核心类,它负责启动和管理 Spring 应用程序。在创建 SpringApplication 时,可以通过 new SpringApplication(MyApp.class) 或者 SpringApplication.run(MyApp.class, args) 方法来指定要启动的主类。在创建 SpringApplication 对象时,Spring Boot 会自动加载应用程序默认的配置文件(application.properties 或 application.yml),并将其转化为 Spring 环境中的属性值。

4.2 刷新上下文阶段

在准备阶段结束后,Spring Boot 开始进入刷新上下文阶段。在该阶段,Spring Boot 会依次执行以下操作:

4.2.1 创建环境对象

首先,Spring Boot 会根据环境变量 SPRING_APPLICATION_JSON、命令行参数、系统属性等信息创建一个 Environment 对象,并把它设置为 Spring 环境的默认环境。Environment 对象负责管理应用程序的所有配置属性,包括命令行参数等。

4.2.2 加载配置文件

接下来,Spring Boot 会根据默认规则和自定义配置加载配置文件。在默认情况下,Spring Boot 会按照以下顺序加载配置文件:

  • file:./config/application.properties
  • file:./config/application.yml
  • classpath:/config/application.properties
  • classpath:/config/application.yml

如果需要修改默认的配置文件路径,可以在 SpringApplication.run() 方法中通过 --spring.config.location 参数指定。例如,可以通过以下方式指定配置文件路径为 /app/config/:

SpringApplication.run(MyApp.class, "--spring.config.location=/app/config/");

4.2.3 创建 SpringApplication 上下文

接着,Spring Boot 会创建一个 SpringApplication 上下文,并将 Environment 对象设置到上下文中。SpringApplication 上下文是 Spring 应用程序的核心容器,负责管理应用程序的所有 Bean。在创建 SpringApplication 上下文之前,Spring Boot 会根据 classpath 扫描包含 @Component 注解的类,并对其进行注册。这些类通常包括控制器、服务和数据访问对象等组件。

4.2.4 加载 Bean 定义

在创建 SpringApplication 上下文后,Spring Boot 会根据 Bean 定义信息生成所有 Bean 实例,并将其添加到容器中。在加载 Bean 定义时,Spring Boot 会运行所有实现了 BeanFactoryPostProcessor 接口的 BeanFactory 后置处理器。BeanFactory 后置处理器负责在创建 Bean 实例之前修改 Bean 的定义信息,例如替换默认实现、添加 AOP 切面等。

4.2.5 注册 BeanPostProcessor

在加载 Bean 定义后,Spring Boot 会注册所有实现了 BeanPostProcessor 接口的 Bean 后置处理器。Bean 后置处理器负责在 Bean 被实例化前后对其进行一些操作,例如添加代理对象、修改属性值等。

4.2.6 初始化非 Web 应用程序上下文

在完成以上操作后,Spring Boot 会初始化非 Web 应用程序上下文,包括事件监听器和组件初始化器等。这些组件通常用于应用程序初始化或清理工作,例如加载资源文件、初始化数据库连接池等。

4.2.7 刷新上下文

最后,在完成所有初始化工作之后,Spring Boot 会调用 refresh() 方法来刷新 SpringApplication 上下文。该方法会启动 Spring 应用程序并加载所有 Bean 实例,然后将上下文发布到 Spring 事件通知机制中,供其他组件使用。

4.3 后置处理阶段

在刷新上下文阶段结束后,Spring Boot 会进入后置处理阶段。在该阶段,Spring Boot 会运行所有实现了 ApplicationRunner 或 CommandLineRunner 接口的组件。这些组件通常用于应用程序启动后的初始化工作,例如读取配置文件、初始化缓存等。

4.4 启动失败处理阶段

如果在刷新 SpringApplication 上下文过程中发生异常,则 Spring Boot 会进入启动失败处理阶段。在该阶段,Spring Boot 会打印出所有异常信息,并尝试优雅地关闭 SpringApplication 上下文。如果在关闭上下文时又发生异常,则 Spring Boot 会将该异常作为新的启动异常抛出。

  1. 总结

综上所述,Spring Boot 应用程序的启动流程可以分为准备阶段、刷新上下文阶段、后置处理阶段和启动失败处理阶段。在启动过程中,Spring Boot 会自动加载配置文件、扫描包含 @Component 注解的类、生成 Bean 定义并初始化所有 Bean 实例等。因此,使用 Spring Boot 可以大大简化应用程序的开发和部署,提高生产效率和代码质量。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。