Spring Boot启动流程详解

Spring Boot 是一个用于简化 Spring 应用程序开发的框架,它提供了一种快速、便捷的方式来创建独立的、生产级的 Spring 应用程序。了解 Spring Boot 的启动流程对于开发和调试应用程序非常重要。下面是 Spring Boot 启动流程的详细解析:

1. 启动类

Spring Boot 应用程序通常以一个主类开始,该类包含 main 方法。这个类使用 @SpringBootApplication 注解标记,表示这是一个 Spring Boot 应用程序。

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

2. SpringApplication.run()

当调用 SpringApplication.run() 方法时,Spring Boot 启动流程开始。这个方法的主要步骤如下:

2.1 创建 SpringApplication 实例

SpringApplication 是 Spring Boot 启动的核心类。在 run() 方法中,首先会创建一个 SpringApplication 实例。

2.2 设置应用上下文

SpringApplication 会根据传入的主类(MyApplication.class)创建一个 ApplicationContext。默认情况下,Spring Boot 使用 AnnotationConfigApplicationContextSpringApplication 的子类 WebApplicationContext(如果是 Web 应用)。

2.3 加载应用程序的配置
  • 加载配置文件:Spring Boot 会自动加载 application.propertiesapplication.yml 文件中的配置。
  • 环境准备:根据配置文件和命令行参数,创建 Environment 对象,包含应用程序的环境信息。
2.4 扫描组件

SpringApplication 会扫描主类所在包及其子包中的组件(使用 @ComponentScan 注解),并注册为 Spring Bean。它会查找以下注解:

  • @Component
  • @Service
  • @Repository
  • @Controller
  • @RestController
2.5 创建和刷新 ApplicationContext
  • 创建 ApplicationContext:根据应用类型(Web 或非 Web),创建相应的 ApplicationContext 实例。
  • 刷新 ApplicationContext:调用 refresh() 方法,完成以下步骤:
    • 注册 BeanDefinition:将所有扫描到的 Bean 注册到上下文中。
    • 实例化 Bean:根据 Bean 的定义创建实例。
    • 依赖注入:处理 Bean 之间的依赖关系,进行依赖注入。
    • 初始化 Bean:调用实现了 InitializingBean 接口的 Bean 的 afterPropertiesSet() 方法,执行初始化逻辑。
2.6 处理 CommandLineRunner 和 ApplicationRunner

如果应用程序中定义了实现了 CommandLineRunnerApplicationRunner 接口的 Bean,Spring Boot 会在上下文刷新后调用它们的 run() 方法。这通常用于执行启动时需要的逻辑。

2.7 启动嵌入式服务器(Web 应用)

如果是 Web 应用,Spring Boot 会自动配置并启动嵌入式服务器(如 Tomcat、Jetty 或 Undertow)。这包括:

  • 配置服务器的端口和上下文路径。
  • 注册 Servlet、Filter 和 Listener。

3. 应用程序启动完成

当所有的 Bean 被初始化并且嵌入式服务器启动后,Spring Boot 应用程序就完成了启动。此时,应用程序可以开始接收请求。

4. 运行时

在应用程序运行期间,Spring Boot 会继续管理 Bean 的生命周期,处理请求,执行定时任务等。

你可能感兴趣的:(spring,boot,java,后端)