三分钟了解Spring Boot启动原理

这篇具有很好参考价值的文章主要介绍了三分钟了解Spring Boot启动原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

三分钟了解Spring Boot启动原理

大家通常只需要给一个类添加一个@SpringBootApplication 注解,然后再加一个main 方法里面固定的写法SpringApplication.run(Application.class, args);
那么spring boot 到底是如何启动服务的呢。
接下来咱们通过源码解析。
Spring Boot 的启动原理可以概括为以下几个步骤:

  1. 加载 Spring Boot 应用程序的启动类
  2. 根据启动类所在的包路径扫描相关的类
  3. 根据扫描到的类自动配置 Spring 应用程序
  4. 启动嵌入式的 Web 服务器
  5. 运行 Spring 应用程序

Spring Boot 启动过程的源码剖析:

@SpringBootApplication // 标记该类为 Spring Boot 应用程序的启动类
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args); // 执行 Spring Boot 应用程序
    }
}

在 Spring Boot 应用程序的启动类中,需要使用 @SpringBootApplication 注解标记该类,以告诉 Spring Boot 这是应用程序的启动类。@SpringBootApplication 注解包含了 @Configuration@EnableAutoConfiguration@ComponentScan 这三个注解,分别表示该类是配置类、开启自动配置和扫描组件。

main 方法中,调用 SpringApplication.run 方法来启动 Spring Boot 应用程序。该方法接受两个参数,第一个参数是启动类的类对象,第二个参数是主方法的参数。在 SpringApplication.run 方法中,会执行以下几个步骤:

  1. 创建一个 SpringApplication 对象,该对象包含了所有的 Spring Boot 应用程序配置信息。
  2. 根据 SpringApplication 对象中的配置信息,创建一个 ApplicationContext 对象,该对象是 Spring 应用程序的上下文。
  3. 将所有的 @Configuration 类型的类注册到 ApplicationContext 对象中。
  4. 根据 @EnableAutoConfiguration 注解,自动配置 Spring 应用程序。
  5. 扫描所有的 @Component 注解的类,并将其注册到 ApplicationContext 中。
  6. 启动嵌入式的 Web 服务器。
  7. 运行 Spring 应用程序。

下面是 SpringApplication.run 方法的源码注释:

public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {
    return run(new Class<?>[] { primarySource }, args);
}

public static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) {
    // 创建 SpringApplication 对象,包含了所有的 Spring Boot 应用程序配置信息
    SpringApplication application = new SpringApplication(primarySources);
    // 运行 Spring Boot 应用程序,并返回上下文对象
    return application.run(args);
}

public ConfigurableApplicationContext run(String... args) {
    // 创建并启动 ConfigurableApplicationContext 对象,返回该对象
    ConfigurableApplicationContext context = createApplicationContext();
    // 执行 Spring 应用程序的监听器
    listeners.starting(this.applicationArguments);
    try {
        // 准备 ApplicationContext 环境
        prepareEnvironment(context, this.environment);
        // 配置 ApplicationContext
        configureIgnoreBeanInfo(context);
        // 执行所有的 ApplicationContextInitializer
        applyInitializers(context);
        // 执行所有的 SpringApplicationRunListener 的 starting 方法
        listeners.contextPrepared(context);
        // 打印 Spring Boot 应用程序的 Banner
        Banner printedBanner = printBanner();
        // 创建 ApplicationContext
        context.refresh();
        // 将 ApplicationContext 注册到 JVM 关闭钩子中
        prepareContext(context, printedBanner);
        // 执行所有的 ApplicationContextInitializer 的 postProcessApplicationContext 方法
        postProcessApplicationContext(context);
        // 执行所有的 SpringApplicationRunListener 的 contextLoaded 方法
        listeners.contextLoaded(context);
    }
    catch (Throwable ex) {
        handleRunFailure(context, ex, listeners);
        throw new IllegalStateException(ex);
    }

    try {
        // 执行所有的 SpringApplicationRunListener 的 started 方法
        listeners.started(context);
        // 启动嵌入式的 Web 服务器
        callRunners(context, this.applicationArguments);
    }
    catch (Throwable ex) {
        handleRunFailure(context, ex, listeners);
        throw new IllegalStateException(ex);
    }

    try {
        // 执行所有的 SpringApplicationRunListener 的 running 方法
        listeners.running(context);
    }
    catch (Throwable ex) {
        handleRunFailure(context, ex, listeners);
        throw new IllegalStateException(ex);
    }

    return context;
}

SpringApplication.run 方法中,还会调用一些其他的方法,如 prepareEnvironmentapplyInitializerspostProcessApplicationContextcallRunners 等,这些方法是 Spring Boot 应用程序启动的关键步骤,它们会对应用程序进行配置、初始化、启动等操作。

好了基本上三分钟差不多了,希望对大家有所帮助,如果有问题可以评论区或者私信留言。以上就是今天总结的所有内容,谢谢大家阅读。文章来源地址https://www.toymoban.com/news/detail-450650.html

到了这里,关于三分钟了解Spring Boot启动原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spring boot启动原理分析

    springboot启动类中有两个关键的地方 1.@SpringBootApplication 注解 2.SpringApplication.run 方法 SpringBootApplication 注解分析 SpringBootApplication 注解由三大注解构成, SpringBootConfiguration 、 EnableAutoConfiguration 、 ComponentScan 。 SpringBootConfiguration 中其实主要就是包装了Configuration注解 EnableAutoConf

    2024年02月11日
    浏览(45)
  • SpringBoot-1-Spring Boot实战:快速搭建你的第一个应用,以及了解原理

    SpringBootWeb入门 我们在之前介绍Spring的时候,已经说过Spring官方(Spring官方)提供很多开源项目,点击projects,看到spring家族旗下的项目 Spring发展到今天已经形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于完成特定的功能。而我们在项目开发时,一般会偏向于选

    2024年02月12日
    浏览(61)
  • 三分钟了解Spring Cloud Gateway路由转发之自动路由

    大家好,我是冰点,今天和大家分享一下关于Spring Cloud Gateway 利用服务注册与发现实现自动路由的原理和源码解读。希望对大家有所帮助。 今天有个新同学,问我 为什么我们的网关服务Spring Cloud Gateway,没有配置路由就可以将请求到路由服务 ,说他们之前的项目的网关是将

    2024年02月08日
    浏览(36)
  • 【Spring Boot】了解Spring Boot 的日志文件

    目录 一、日志的作用 二、日志文件的简单使用  1、Spring Boot中的默认日志 2、自定义日志打印 三、日志级别 1、日志级别分类  2、日志级别的设置 3、日志持久化 四、基于LomBok的日志输出 1、安装Lombok插件 2、使用Lombok添加日志(@slf4j) 3、使用Lombok添加getter和setter方法(@Da

    2024年02月13日
    浏览(44)
  • Spring Boot中实现订单30分钟自动取消的策略

    🎉欢迎来到架构设计专栏~Spring Boot中实现订单30分钟自动取消的策略 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:架构设计 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平有限,

    2024年02月08日
    浏览(58)
  • 深入了解Spring Boot自动装配

    Spring Boot的自动装配是一项强大的功能,能够简化应用程序的配置和开发过程。让我们通过一系列详细的例子来深入了解这一特性。 在Spring Boot中,自动装配是指框架根据应用程序的依赖关系,自动配置和装配相应的Bean,而无需手动设置。这使得开发者可以更专注于业务逻辑

    2024年01月23日
    浏览(46)
  • 大数据学习之Flink、10分钟了解Flink的核心组件以及它们的工作原理

     第一章、Flink的容错机制 第二章、Flink核心组件和工作原理 第三章、Flink的恢复策略 第四章、Flink容错机制的注意事项 第五章、Flink的容错机制与其他框架的容错机制相比较 目录 第二章、Flink核心组件和工作原理 Ⅰ、核心组件 1. Checkpoint组件: 2. Savepoint组件: 3. Barrier组件

    2024年01月23日
    浏览(41)
  • 深入了解 Spring Boot 的加载过程

    Spring Boot 的加载过程可以大致分为以下几个阶段: 类加载 :首先,Java 虚拟机会加载必要的类,包括 Spring Boot 的核心类和应用程序的相关类。 配置解析 :Spring Boot 会解析各种配置,如 application.properties 或 application.yml 文件中的配置。 自动配置 :根据应用程序的需求和配置

    2024年04月23日
    浏览(29)
  • 快速了解spring boot中的@idempotent注解

    目的:一定时间内,同样的请求(业务参数相同)访问同一个接口,则只能成功一次,其余被拒绝 幂等实现原理就是利用AOP面向切面编程, 在执行业务逻辑之前插入一个方法,生成一个token,存入redis并插入到response中返回给前台,然后前台再拿着token发起请求,经过判断只执行

    2024年01月21日
    浏览(41)
  • 电脑分盘怎么合并?只需1分钟,轻松学会

    有些小伙伴喜欢将电脑进行分盘,以此将文件放进不同的分盘进行管理。但有时候,电脑磁盘分盘过多,管理起来又会有些麻烦。将一些闲置的磁盘进行合并很有必要。电脑分盘怎么合并?下面就跟着小编一起来看看吧。   很多小伙伴还不清楚电脑分盘怎么合并。其实操作很

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包