关键词

Springboot启动流程详细分析

Spring Boot 启动流程详细分析

Spring Boot 是一个基于 Spring 框架的快速应用开发框架,旨在尽可能简化 Spring 应用程序的创建、开发和部署。在 Spring Boot 的背后有一套强大的启动机制和自动化配置。

本文将深入探索 Spring Boot 的启动流程,包括 Spring Boot 的三种启动方式和启动核心类、主函数入口、SpringApplication.run() 方法分析、Spring Boot 的自动配置原理等。

三种 Spring Boot 启动方式

Spring Boot 支持三种启动方式,分别是:

  1. 命令行方式启动:
    在命令行中输入 java -jar demo.jar 即可启动应用程序,demo.jar 是应用的可执行 jar 包。

  2. Maven 启动方式:
    在 Maven 中使用 Spring Boot 插件,通过调用 Maven 命令启动应用程序。

  3. IDE 启动方式:
    在集成开发环境(IDE)中,右键单击主类并选择 “Run” 即可启动应用程序。

下面,我们来看一下 Spring Boot 的启动核心类。

启动核心类

SpringApplication 是 Spring Boot 启动的核心类,它提供了各种配置和应用程序的启动方法。SpringApplication 的主要作用是创建一个 Spring 应用程序,并将所有 Spring 组件加载到应用程序的上下文中。

下面是启动核心类的代码片段:

@SpringBootApplication
public class DemoApplication {

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

SpringApplication.run() 方法分析

SpringApplication 类中有一个静态方法 run(),它是 Spring Boot 应用程序的入口点。

该方法有两个参数,一个是启动类的 class 对象,另一个是 main 函数的参数 args。

以下是 SpringApplication.run() 方法的流程:

  1. 创建 Spring 应用程序上下文,并准备启动环境;
  2. 创建 BeanFactory,并加载所有的 Bean 定义;
  3. 执行 Spring 应用程序上下文的 refresh() 方法,刷新应用程序上下文;
  4. 执行 Spring 应用程序上下文的 registerShutdownHook() 方法,注册 JVM 关闭钩子;
  5. 检测当前应用程序是否正在运行 web 环境;
  6. 运行应用程序。

Spring Boot 的自动配置原理

Spring Boot 的自动配置原理是基于 Spring Framework 的 spring-factories 机制实现的,它根据 classpath 路径下的 META-INF/spring.factories 文件来自动配置应用程序。

例如org.springframework.boot.autoconfigure.EnableAutoConfiguration就是 Spring Boot 的自动化配置类,但是实际上具体实现需要到spring-boot-autoconfigure工程中。

可以在应用程序的配置文件 application.properties 或 application.yml 中配置 Spring Boot 的自动化配置类,例如:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

以上配置表示 DataSourceAutoConfiguration 不会被自动加载。

示例

下面我们以一个简单的 Spring Boot Web 应用程序为例,来说明 Spring Boot 启动流程的细节。

  1. 创建一个名为 webdemo 的 Spring Boot Web 应用程序:
$ spring init --dependencies=web webdemo

其中 --dependencies=web 表示我们会使用 Spring Boot Web 依赖。

  1. src/main/java/com/example/webdemo/ 目录下创建一个名为 HelloController.java 的类:
@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

在该类中,我们使用 @RestController 注解标记该类为 Spring MVC 控制器,并在该类中创建一个 hello() 方法,该方法返回一个字符串 "Hello, World!"。

  1. src/main/resources/application.properties 文件中添加如下内容:
server.port=8080
logging.level.root=info

其中,server.port 配置了 Web 服务器端口,logging.level.root 配置了日志级别。

  1. 运行应用程序:
$ ./mvnw spring-boot:run

运行成功后,在浏览器访问 http://localhost:8080/hello,即可看到输出的字符串 "Hello, World!"。

这就是一个简单的 Spring Boot Web 应用程序的示例,从中我们可以了解到 Spring Boot 的启动流程。

本文链接:http://task.lmcjl.com/news/8025.html

展开阅读全文