springboot 启动流程(六):启动流程总结

247 阅读2分钟

注:本系列源码分析基于springboot 2.2.2.RELEASE,对应的spring版本为5.2.2.RELEASE,源码的gitee仓库仓库地址:gitee.com/funcy/sprin….

前面几篇文章分析 springboot 的启动流程,本文来总结下。

文章一开始,从SpringApplication.run(Demo01Application.class, args);代码入手,着重分析了两个方法:

  • SpringApplication#SpringApplication(...)
  • SpringApplication#run(...)

这两个方法涵盖了springboot启动的整个流程,这里我们逐一总结下 。

SpringApplication#SpringApplication(...)

这个方法的流程如下:

其中,

  • webApplicationType 会在后面决定创建什么类型的applicationContext
  • Initialzers 来自于META-INF/spring.factories,会在 springboot 启动时做一些初始化操作;
  • Listteners 同样来自于META-INF/spring.factories,提供了多个方法,可以方便地监听springboot 的执行过程。

SpringApplication#run(...)

这部分的流程如下:

其中,

  • getRunListener() 会获取所有的Listeners,也就是在SpringApplication#SpringApplication(...) 中 获取的ListenersListeners中提供了众多方法,可监听springboot的启动流程;
  • 准备运行环境时,会根据webApplicationType的类型来创建、配置,得到相应类型的Environment对象,这 个对象后面会设置到spring容器中,spring容器中使用的Environment就是在这里创建及配置的;
  • 创建ioc容器时,也是根据webApplicationType的类型来创建对应的ApplicationContext
  • 在准备ioc容器的方法中,会对ApplicationContext做一个配置 ,Initializers 也会在这里运行;
  • 启动ioc容器时,springboot 会注册一个shutdownhook,用以在项目关闭时处理关闭操作,另外,对于ioc的启动流程,springboot 在其扩展中会创建及启动web容器;
  • springboot 提供了两种类型的运行器:ApplicationRunnerCommandLineRunner,在启动后会调用两者的方法。

以上内容讲的比较简略,如果要详细了解,可自行阅读前面的文章。


本文原文链接:my.oschina.net/funcy/blog/… ,限于作者个人水平,文中难免有错误之处,欢迎指正!原创不易,商业转载请联系作者获得授权,非商业转载请注明出处。

【springboot源码分析】springboot源码分析系列文章汇总