栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot-启动流程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot-启动流程

一、创建SpringApplication

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

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

        3.获取初始启动引导器bootstrappers,去spring.factories文件中找bootstrapper

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

        5.获取 应用监听器ApplicationListener,去spring.factories 找 listeners        

二、运行SpringApplication

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

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

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

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

        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(),通知所有监听器 启动失败)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1035746.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号