springboot启动过程总结:

1、SpringBoot启动过程有两大步:①传入spring利用,而后创立spring利用 ②把spring利用跑起来- 创立 SpringApplication  - 保留一些信息。  - 断定以后利用的类型。Servlet or 响应式编程  - bootstrappers:初始启动疏导器(List<Bootstrapper>):去spring.factories文件中找 org.springframework.boot.Bootstrapper  - 找 ApplicationContextInitializer;去spring.factories找 ApplicationContextInitializer    - 封装到 List<ApplicationContextInitializer<?>> initializers  - 找ApplicationListener利用监听器。去spring.factories找 ApplicationListener    - 封装到 List<ApplicationListener<?>> listeners简略来说,利用创立的过程,就是把一些要害的主键去spring.factories文件给咱们读取信息读取进去,提前保留到springapplication里- 运行 SpringApplication  - StopWatch 进行监听器    - 记录利用的启动工夫  - 创立疏导上下文(Context环境)createBootstrapContext()    - 获取到所有之前保留的 bootstrappers 挨个执行他们的 intitialize() 来实现对疏导启动器上下文环境设置  - 让以后利用进入headless模式。java.awt.headless (headless是自力更生的意思,不依赖他人)    - 获取所有RunListener(运行监听器)【为了不便所有Listener进行事件感知】    - getSpringFactoriesInstances 去spring.factories找 SpringApplicationRunListener.   - 遍历所有的 SpringApplicationRunListener调用 starting 办法;    - 相当于告诉所有感兴趣零碎正在启动过程的人,我的项目正在 starting。(即通知我这个我的项目正在启动)    - 保留命令行参数;ApplicationArguments      - 筹备环境 ,调用 prepareEnvironment();    - 返回或者创立根底环境信息对象。StandardServletEnvironment    - 配置环境信息对象。      - 读取所有的配置源的配置属性值。    - 绑定环境信息    - 遍历每个监听器,调用 listener.environmentPrepared();告诉所有的监听器以后环境筹备实现  - 创立IOC容器(调用createApplicationContext())    - 依据我的项目类型(Servlet)创立容器,    - 以后会创立 AnnotationConfigServletWebServerApplicationContext  - 筹备ApplicationContext IOC容器的根本信息  调用prepareContext()    - 保留环境信息    - IOC容器的后置解决流程。    - 利用初始化器:applyInitializers;      - 遍历所有的 ApplicationContextInitializer。调用 initialize.。来对ioc容器进行初始化扩大性能      - 遍历所有的 listener 调用 contextPrepared。实际上是EventPublishRunListenr:告诉所有的监听器contextPrepared容器的上下文环境曾经筹备好了    - 所有的监听器 调用contextLoaded。告诉所有的监听器 contextLoaded;容器的上下文环境曾经加载好了  - 刷新IOC容器。refreshContext    - 创立容器中的所有组件  - 容器刷新实现后要做的工作(调用 afterRefresh())  - 遍历所有监听器 调用 listeners.started(context); 告诉所有的监听器started 我的项目曾经启动了(告诉监听器又一个事干好了)所以在这里就能够拜访8080了  - 调用所有runners; (调用 callRunners())    - 获取容器中的ApplicationRunner     - 获取容器中的CommandLineRunner    - 合并所有runner并且依照@Order进行排序    - 遍历所有的runner。调用 run办法  - 如果从`筹备环境 ,调用 prepareEnvironment()到这里` 有异样,    - 调用Listener 的 failed        - 没有任何异样就 调用所有监听器的 running 办法  listeners.running(context); 告诉所有的监听器 running我的项目曾经进入running状态了  - running如果有问题。持续告诉 failed 。调用所有 Listener 的failed;告诉所有的监听器failed 以后我的项目运行失败
只有看到这个getSpringFactoriesInstances()办法,都是去spring.factories文件找货色
springboot启动过程波及到的组件有:ApplicationContextInitializer, ApplicationListener, SpringApplicationRunListener, ApplicationRunner,CommandLineRunner咱们就能够通过自定义组件,来监控springboot整个启动过程,而后在某个时刻做一些事件