跳到主要内容

Spring Boot启动流程

介绍

Spring Boot 是一个用于快速构建 Spring 应用的框架,它简化了 Spring 应用的初始搭建和开发过程。了解 Spring Boot 的启动流程对于掌握其工作原理至关重要。本文将逐步讲解 Spring Boot 应用的启动流程,并通过实际案例展示其应用场景。

Spring Boot 启动流程概述

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

  1. 加载 SpringApplication 类
  2. 运行 SpringApplication 的 run 方法
  3. 创建并配置 ApplicationContext
  4. 执行 ApplicationRunner 和 CommandLineRunner
  5. 启动嵌入式 Web 服务器

接下来,我们将详细讲解每个步骤。

1. 加载 SpringApplication 类

Spring Boot 应用的启动入口通常是 main 方法,该方法会调用 SpringApplication.run() 方法。SpringApplication 类是 Spring Boot 应用的核心启动类。

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

2. 运行 SpringApplication 的 run 方法

SpringApplication.run() 方法会执行以下操作:

  • 创建 SpringApplication 实例
  • 加载应用上下文
  • 启动嵌入式 Web 服务器
java
public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {
return new SpringApplication(primarySource).run(args);
}

3. 创建并配置 ApplicationContext

ApplicationContext 是 Spring 框架的核心容器,负责管理 Bean 的生命周期。Spring Boot 会根据应用的类型(如 Web 应用或非 Web 应用)创建相应的 ApplicationContext

java
ConfigurableApplicationContext context = SpringApplication.run(MyApplication.class, args);

4. 执行 ApplicationRunner 和 CommandLineRunner

ApplicationContext 创建并初始化完成后,Spring Boot 会执行所有实现了 ApplicationRunnerCommandLineRunner 接口的 Bean。这些接口允许开发者在应用启动时执行一些自定义逻辑。

java
@Component
public class MyRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("Application started with arguments: " + Arrays.toString(args.getSourceArgs()));
}
}

5. 启动嵌入式 Web 服务器

如果应用是一个 Web 应用,Spring Boot 会自动启动一个嵌入式 Web 服务器(如 Tomcat、Jetty 或 Undertow)。开发者无需手动配置服务器,Spring Boot 会根据依赖自动选择并启动合适的服务器。

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

实际案例

假设我们有一个简单的 Spring Boot Web 应用,它提供了一个 REST API 来返回 "Hello, World!"。以下是该应用的代码示例:

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

@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}

当应用启动时,Spring Boot 会执行以下步骤:

  1. 加载 HelloWorldApplication
  2. 运行 SpringApplication.run() 方法
  3. 创建并配置 ApplicationContext
  4. 启动嵌入式 Tomcat 服务器
  5. 注册 @RestController 并映射 /hello 路径

启动后,访问 http://localhost:8080/hello 将会返回 "Hello, World!"。

总结

Spring Boot 的启动流程是一个复杂但高度自动化的过程。通过理解这些步骤,开发者可以更好地掌握 Spring Boot 的工作原理,并在实际开发中灵活运用。本文详细介绍了 Spring Boot 的启动流程,并通过实际案例展示了其应用场景。

附加资源

练习

  1. 创建一个简单的 Spring Boot 应用,并实现一个 CommandLineRunner 来在启动时打印一条消息。
  2. 修改上述应用,使其在启动时自动加载一个配置文件,并在 ApplicationRunner 中读取并打印配置内容。