• SpringBoot-启动流程


    一、创建SpringApplication

            1.保存一些必要的初始化信息(主配置类)

            2.判断当前应用类型(响应式/servlet

            3.获取初始启动引导器bootstrappersspring.factories文件中找bootstrapper

            4.获取 应用上下文初始化器ApplicationContextInitializer,spring.factories initializers

            5.获取 应用监听器ApplicationListenerspring.factories  listeners        

    二、运行SpringApplication

            1.创建StopWatch停止监听器),记录了应用的启动时间

            2.创建引导上下文(Context环境):createBootstrapContext(),获取到所有之前的 bootstrappers 挨个执行 intitialize() 来完成对引导启动器上下文环境设置

            3.让当前应用进入headless模式(简单说是自力更生模式)。java.awt.headless

            4.获取所有运行监听器 RunListener【为了方便所有Listener进行事件感知】,要去spring.factoriesSpringApplicationRunListener.

            5.遍历 SpringApplicationRunListener 调用 starting 方法;​​​​​​​相当于通知所有对系统正在启动过程感兴趣的人项目开始启动

            6.保存命令行参数ApplicationArguments

            7.准备环境 prepareEnvironment();

                    7.1 返回或者创建基础环境信息对象StandardServletEnvironment

                    7.2 ​​​​​​​配置环境信息对象​​​​​​读取所有的配置源的配置属性值

                    7.3 绑定环境信息

                    7.4 监听器调用 environmentPrepared();通知所有监听器当前环境准备完成

            8.创建IOC容器(createApplicationContext

                    8.1 根据项目类型(Servlet)创建容器

                    8.2 创建 AnnotationConfigServletWebServerApplicationContext

            9.准备IOC容器基本信息prepareContext

                    9.1 保存环境信息

                    9.2 IOC容器的后置处理流程。

                    9.3 应用初始化器-applyInitializers

                         9.3.1 遍历所有ApplicationContextInitializer 对ioc容器进行初始化扩展

                         9.3.2 遍历所有 listener 调用 contextPrepared通知所有的监听器上下文准备好

                    9.4 所有的监听器调用 contextLoaded通知所有的监听器上下文加载好

            10.刷新IOC容器refreshContext)-创建容器中的所有组件(Spring注解)

            11.所有监听器调用 started(context); 通知所有的监听器项目启动了

            12.调用所有runners(​​​​​​​如果以上有异常,​​​​​​​调用Listener failed(),通知所有监听器 启动失败

                    12.1 获取容器中的 ApplicationRunner CommandLineRunner

                    12.2 合并所有runner并且按照@Order进行排序

                    12.3 遍历所有runner调用 run 方法调用所有监听器的 running 方法       

            13.listeners.running(context); 通知所有的监听器 项目已经启动完成running如果有问题,调用所有 Listener failed(),通知所有监听器 启动失败

  • 相关阅读:
    PCL入门1之点云读取及可视化
    [Vue]嵌套(多级)路由
    elasticsearch-6.8.5升级至6.8.22
    【自然语言处理(NLP)】基于注意力机制的中-英机器翻译
    【基于C的排序算法】归并排序
    力扣最热一百题——每日温度
    C++11特性——thread_local
    玩转SpringBoot安全管理:SpringSecurity之UserDetailService身份认证
    MySQL 社区开源备份工具 Xtrabackup 详解
    TensorFlow系列:第五讲:移动端部署模型
  • 原文地址:https://blog.csdn.net/weixin_62427168/article/details/126185334