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

  • 时间:
  • 浏览:1

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

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

11、完成最终的程序运行的启动

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

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

大伙将各步骤总结精炼如下:

10、由 SpringApplicationRunListener 来发出 started 消息

比如,把大伙天天司空见惯的 Spring Boot 应用的启动类来拆解一下写出来可是我另另另另3个:

SpringApplication 的run()法律办法探秘

先看看代码长啥样子:

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

SpringApplication 这一 类应该与非 Spring Boot 框架的“创新”产物了,原始的 Spring 中并如此这一 类,SpringApplication 中封装了一套 Spring 应用的启动流程,然而这对用户全部透明,有以后大伙上手 Spring Boot 时感觉很简洁、轻量。

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



@SpringBootApplication

SpringApplication 以及 run() 法律办法

2、有以后由 SpringApplicationRunListener 来发出 starting 消息

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

4、完成事先,依然由 SpringApplicationRunListener 来发出 environmentPrepared 消息

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

SpringApplication 实例的初始化

大伙对照代码来看:

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

另另另另3个一拆解后大伙发现,大伙都能不都可以先构造 SpringApplication 类对象,有以后调用该对象的 run() 法律办法。如此接下来就讲讲 SpringApplication 的构造过程 以及其 run() 法律办法的流程,搞清楚了这一 ,如此也就搞清楚了SpringBoot应用是要怎样运行起来的!

5、创建 ApplicationContext

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

SpringBoot 另另另另3个多关键元素:

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

一般来说默认的 SpringApplication 执行流程可都可以都都可以满足大次责需求,有以后若用户想干预这一 过程,则都可以通过 SpringApplication 在流程这一 地方开启扩展点来完成对流程的扩展,典型的扩展方案那可是我使用 set 法律办法。

① 推断应用的类型:创建的是 REACTIVE应用、SERVLET应用、NONE 四种 中的某四种

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

至此,全流程结速了!