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 的启动流程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot启动流程详细分析 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 深入JAVA对象深度克隆的详解

    深入JAVA对象深度克隆的详解 对象深度克隆是指克隆一个对象及其子对象,同时新对象与原对象是互不干扰的,对新对象的任何修改都不会影响原对象。在Java中,实现对象深克隆通常使用“序列化”和“反序列化”技术。本篇文章将详细讲解如何实现Java对象的深度克隆。 实现Java对象深度克隆 方法一:序列化与反序列化实现克隆 序列化对象可以用ObjectOutputS…

    Java 2023年5月26日
    00
  • 10k+点赞的 SpringBoot 后台管理系统教程详解

    首先我们需要明确一下什么是SpringBoot后台管理系统。SpringBoot是一个Java开发框架,它能够帮助开发者快速搭建一个Java Web应用程序,尤其适用于后台管理系统的开发。而SpringBoot后台管理系统,就是指采用SpringBoot框架开发的一个管理后台,用于管理数据和业务逻辑。 接下来,我将详细讲解如何制作一个10k+点赞的Sprin…

    Java 2023年5月15日
    00
  • java的Hibernate框架报错“TypeMismatchException”的原因和解决方法

    当使用Java的Hibernate框架时,可能会遇到“TypeMismatchException”错误。这个错误通常是由于以下原因之一引起的: 数据类型不匹配:如果您的数据类型不匹配,则可能会出现此错误。在这种情况下,需要检查您的数据类型以解决此问题。 数据库表结构不匹配:如果您的数据库表结构不匹配,则可能会出现此错误。在这种情况下,需要检查您的数据库表结构…

    Java 2023年5月4日
    00
  • Elasticsearch搜索功能的实现(五)– 实战

    实战环境 elastic search 8.5.0 + kibna 8.5.0 + springboot 3.0.2 + spring data elasticsearch 5.0.2 + jdk 17 一、集成 spring data elasticsearch 1 添加依赖 <dependency> <groupId>org.sp…

    Java 2023年4月19日
    00
  • Java SpringBoot使用guava过滤器

    Java SpringBoot使用Guava过滤器攻略 在Java SpringBoot中使用Guava库来实现过滤器可以非常方便地对数据进行过滤和转换。以下是实现该功能的完整攻略: 第一步:添加Maven依赖 在pom.xml文件中添加以下依赖: <dependencies> <dependency> <groupId>…

    Java 2023年5月19日
    00
  • 看过就懂的java零拷贝及实现方式详解

    看过就懂的java零拷贝及实现方式详解 什么是零拷贝? 传统的IO操作,读取文件、发送网络请求等,都需要进行数据拷贝。在数据从磁盘、内存中读取到内核缓冲区,再从内核缓冲区拷贝到用户缓冲区,最终传输到网络或者磁盘上,这样的操作称为数据拷贝。 零拷贝指的是在数据传输的过程中不进行数据拷贝操作,而是直接读取内存中的数据进行传输,从而节省CPU的开销。 Java如何…

    Java 2023年5月26日
    00
  • 详解SpringBoot+SpringSecurity+jwt整合及初体验

    详解SpringBoot+SpringSecurity+jwt整合及初体验 本文将详细讲解如何将SpringBoot、SpringSecurity和jwt整合起来实现用户认证与授权功能,包含完整的代码和详细的步骤,最终实现一个简单的用户登录验证功能。 环境准备 JDK 1.8 Maven 3.x IDE: 推荐使用IntelliJ IDEA Postman:…

    Java 2023年5月20日
    00
  • SpringMVC 向jsp页面传递数据库读取到的值方法

    首先需要说明的是,SpringMVC向JSP页面传递数据库读取到的值的方法有很多种,这里介绍一种基本的方法。 控制层(Controller) 在控制层中我们需要注入一个由Service层封装好的Map对象,并将这个Map对象存入ModelAndView中,然后返回给View层(即JSP页面)。 示例: @Controller public class Use…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部