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

  • 时间:
  • 浏览:0

而且一拆解后大家儿发现,大家儿也可不要能先构造 SpringApplication 类对象,而且调用该对象的 run() 办法。那么接下来就讲讲 SpringApplication 的构造过程 以及其 run() 办法的流程,搞清楚了有一种,那么也就搞清楚了SpringBoot应用是怎么运行起来的!

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

5、创建 ApplicationContext

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

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

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

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

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



@SpringBootApplication

SpringApplication 以及 run() 办法

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

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

2、而且由 SpringApplicationRunListener 来发出 starting 消息

至此,全流程以后 开始英语 英语 英语 !

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

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

SpringApplication 的run()办法探秘

先看看代码长啥样子:

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

SpringApplication 实例的初始化

大家儿对照代码来看:

比如,把大家儿天天司空见惯的 Spring Boot 应用的启动类来拆解一下写出来而且而且:

10、由 SpringApplicationRunListener 来发出 started 消息

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

SpringBoot 1个 多多多关键元素:

一般来说默认的 SpringApplication 执行流程以后 可不要能 满足大部分需求,而且若用户想干预有一种过程,则可不要能 通过 SpringApplication 在流程有些地方开启扩展点来完成对流程的扩展,典型的扩展方案那而且使用 set 办法。

11、完成最终的多线程 池池的启动

SpringApplication 有一种类应该算是 Spring Boot 框架的“创新”产物了,原始的 Spring 中并那么有一种类,SpringApplication 中封装了一套 Spring 应用的启动流程,然而这对用户完全透明,而且大家儿上手 Spring Boot 时感觉很简洁、轻量。

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

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

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