zoukankan      html  css  js  c++  java
  • SpringBoot(二)SpringBoot 启动流程

    SpringBoot 启动流程:

    首先我们看看一切的起源——SpringBoot启动类:

    执行main方法,然后调用SpringApplication.run()方法,这样我们的项目就启动了。是不是很神奇。

    那么我们来看看run方法,他到底为我们做了什么,一起慢慢剥开这颗洋葱,看看他的内心是什么,废话不多说,直接上源码。

    各个主要步骤我已经标注在上图之中了,除此之外,我也按照自己的理解画了一个流程图如下所示,可以对照数字标示看一下:

    启动过程是不是很清晰了。哈哈哈。。。

    下面我们在详细的总结一下:

    (1)通过 SpringFactoriesLoader 加载 META-INF/spring.factories 文件,获取并创建 SpringApplicationRunListener对象

    (2)然后由 SpringApplicationRunListener 来发出 starting 消息

    (3)创建参数,并配置当前 SpringBoot 应用将要使用的 Environment

    (4)完成之后,依然由 SpringApplicationRunListener 来发出 environmentPrepared 消息

    (5)创建 ApplicationContext

    (6)初始化 ApplicationContext,并设置 Environment,加载相关配置等

    (7)由 SpringApplicationRunListener 来发出 contextPrepared 消息,告知SpringBoot 应用使用的 ApplicationContext已准备OK

    (8)将各种 beans 装载入 ApplicationContext,继续由 SpringApplicationRunListener 来发出 contextLoaded 消息,告知 SpringBoot 应用使用的 ApplicationContext 已装填OK

    (9)refresh ApplicationContext,完成IoC容器可用的最后一步

    (10)由 SpringApplicationRunListener 来发出 started 消息

    (11)完成最终的程序的启动

    (12)由 SpringApplicationRunListener 来发出 running 消息,告知程序已运行起来了

    个人总结:springboot启动过程

    spring boot 2.0在启动的时候,首先会调用SpringApplication的构造函数进行初始化,调用实例函数run,在run函数中,首先获取监听器,并设置成启动状态,后面准备环境prepareEnvironment,准备prepareContext上下文,刷新上下文refreshContext,最后调用callRunners来依次调用注册的Runner。

    多写代码多读书,做个有气质Coder。

  • 相关阅读:
    STL特性总述——写在前面
    C++多线程框架
    C++内存管理之unique_ptr
    ubuntu文本模式/终端中文乱码解决
    log4net日志在app.config中assembly不起作用
    解决多线程委托二义性问题
    IIS 中文文件名下载会出现403访问被拒绝
    C# 异常:从作用域“”引用了“FiasHostApp.Entity.DBEntity.FIAS_RM_v1.ITraNetMgrUnitBaseInfoRecord”类型的变量“w”,但该变量未定义
    C# string.Split对于换行符的分隔正确用法
    knockoutJS+knockout.multimodels使用记录
  • 原文地址:https://www.cnblogs.com/KaKa-King/p/9604036.html
Copyright © 2011-2022 走看看