• 【微服务专题】Spring启动过程源码解析


    前言

    这部分只是个人的自结,方便后面回来看源码的时候跟踪,个人感觉看完之后没什么需要特别学习的地方。大家绕道走吧

    阅读对象

    1. 有SpringBoot使用经验的朋友
    2. 了解什么是SPI

    阅读导航

    系列上一篇文章:《【微服务专题】手写模拟SpringBoot

    前置知识

    笔记正文

    一、SpringBoot启动过程源码解析

    本次源码启动的入口,就是下面这一段源码:

    @SpringBootApplication
    public class MyApplication {
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    然后我的SpringBoot依赖是:2.6.4

        <dependency>
          <groupId>org.springframework.bootgroupId>
          <artifactId>spring-boot-starter-webartifactId>
          <version>2.6.4version>
        dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    OK,先来一个业务流程图。

    1.1 SpringBoot启动过程源码流程图

    在这里插入图片描述

    想看流程图的朋友,可以对图片右键-》新标签页打开… 这样才会比较清晰

    总结完之后,我的想法只有一个,这个源码挺复杂的,没啥必要看了,注释还少,哈哈。
    当然也不是没有任何要总结的,多少学习了一点东西吧

    1.2 流程解析补充

    1.2.1 SpringApplicationRunListeners:SpringBoot运行过程监听器

    顾名思义,这个是SpringBoot提供的,用来监听SpringBoot启动过程的监听器接口。它会在某些特定的节点,换句话说:比较明显的流程切换节点,调用监听器接口对应的回调方法。回调接口如下图:
    在这里插入图片描述
    SpringBoot提供了一个默认,该接口的实现类EventPublishingRunListener(下面简称简单实现类),下面我结合这个实现类简单介绍一下它的作用及表现:

    • starting():在run方法首次启动时立即调用。可以用于非常早期的初始化。简单实现类会在此发布一个ApplicationStartingEvent事件
    • environmentPrepared():在环境准备好之后调用,但在ApplicationContext创建之前调用。简单实现类会发布一个ApplicationEnvironmentPreparedEvent事件

    所谓环境准备好,是指参数、配置都已经加载完了,但是在Spring容器没有创建之前

    • contextPrepared():在ApplicationContext创建并准备好之后调用,但在加载源之前调用。简单实现类会发布一个ApplicationContextInitializedEvent事件

    只是创建、初始化了容器,但是还没有把参数、配置等装载到容器呢

    • contextLoaded():在ApplicationContext加载后但在刷新之前调用。简单实现类会发布一个ApplicationPreparedEvent事件

    装载参数了。但是这里还没开始调用Spring的refresh方法。有经验的朋友应该知道,在这里一个很显著的标志是,Spring还没开始创建bean呢。其实更深的来说,Spring容器还没开始工作呢

    • started():ApplicationContext已经刷新,应用程序已经启动,但是CommandLineRunners和ApplicationRunners还没有被调用。简单实现类会发布一个ApplicationStartedEvent事件

    这是一个比较重要的拓展点了。标志着Spring容器已经启动并且完成了所有工作,用户可以使用了。这个事件也是我们在SpringBoot开发中最常使用的一个,楼主我就喜欢在这里做拓展

    • ready():在run方法完成之前立即调用,此时ApplicationContext已经刷新,并且调用了所有CommandLineRunners和applicationrunner。简单实现类会发布一个ApplicationReadyEvent事件
    • failed():在运行应用程序时发生故障时调用。简单实现类会发布一个ApplicationFailedEvent事件

    学习总结

    感谢

  • 相关阅读:
    QT scrollArea控件背景透明,但不影响子控件的方法
    欺诈团伙遇上关联网络,邪不压正
    webpack打包原理--webapck-cli及Tapable
    ardupilot 中常用的框架类及结构
    CFdiv2-Beautiful Mirrors-(期望)
    不会就坚持43天吧 反向遍历
    详解Python列表(list)的方法sort()的第一个参数key【简单清晰明了的讲解】
    【C++进阶】:AVL树(平衡因子)
    机器学习笔记07---朴素贝叶斯分类器
    vue3 + elementPlus实现select下拉框插入确定和取消按钮。
  • 原文地址:https://blog.csdn.net/qq_32681589/article/details/134409560