Spring Boot 应用程序启动流程分析

  • 时间:
  • 浏览:2

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

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

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

③ 使用 SpringFactoriesLoader查找并加载 classpath下 META-INF/spring.factories文件中的所有可用的 ApplicationListener

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

④ 推断并设置 main土土办法的定义类

11、完成最终的守护进程的启动

而是一拆解后亲戚亲戚朋友发现,亲戚亲戚朋友也时需先构造 SpringApplication 类对象,何如让调用该对象的 run() 土土办法。没人了接下来就讲讲 SpringApplication 的构造过程 以及其 run() 土土办法的流程,搞清楚了这俩 ,没人了也就搞清楚了SpringBoot应用是何如运行起来的!

两个关键的步骤已标注在图中,分别解释如下:

亲戚亲戚朋友将各步骤总结精炼如下:

10、由 SpringApplicationRunListener 来发出 started 消息

一般来说默认的 SpringApplication 执行流程何如让能才能满足大每段需求,何如让若用户想干预这俩 过程,则能才能通过 SpringApplication 在流程这俩 地方开启扩展点来完成对流程的扩展,典型的扩展方案那而是使用 set 土土办法。

各个主要步骤我何如让标注在上图之中了,除此之外,我也按照买车人的理解画了一个多多多流程图如下所示,能才能对照数字标示看一下:

2、何如让由 SpringApplicationRunListener 来发出 starting 消息



@SpringBootApplication

SpringApplication 以及 run() 土土办法

SpringApplication 的run()土土办法探秘

先看看代码长啥样子:

4、完成以前,依然由 SpringApplicationRunListener 来发出 environmentPrepared 消息

① 推断应用的类型:创建的是 REACTIVE应用、SERVLET应用、NONE 有这俩中的某有这俩

SpringBoot 一个多多多多关键元素:

至此,全流程结速!

② 使用 SpringFactoriesLoader查找并加载 classpath下 META-INF/spring.factories文件中所有可用的 ApplicationContextInitializer

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

12、由 SpringApplicationRunListener 来发出 running 消息,告知守护进程已运行起来了

5、创建 ApplicationContext

比如,把亲戚亲戚朋友天天司空见惯的 Spring Boot 应用的启动类来拆解一下写出来而是而是:

SpringApplication 实例的初始化

亲戚亲戚朋友对照代码来看:

SpringApplication 这俩 类应该算不算 Spring Boot 框架的“创新”产物了,原始的 Spring 中并没人了这俩 类,SpringApplication 中封装了一套 Spring 应用的启动流程,然而这对用户删剪透明,何如让亲戚亲戚朋友上手 Spring Boot 时感觉很简洁、轻量。

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