springboot启动流程

springboot的启动流程;

总体来说,分为两个核心步骤

1,创建SpringApplication对象

2,SpringApplication的run方法实现启动同时返回当前容器的上下文对象

分析一下详细的流程;

1,创建SpringApplication对象,指定springboot容器初始化操作

 

构造函数内容:

2,获取当前应用启动类型

    原理:判断当前classpath是否有加载我们的servlet类,返回servlet web的启动方式

    webApplicationType分为三种类型:

        1,REACTIVE 响应式启动(spring5新特性)

        2,NONE 不会嵌入web容器启动 (在将springboot项目放入外部服务器运行的时候使用,可以在application.yml中配置)

        3,SERVLET 基于web容器启动 (嵌入式web容器,由java语言创建)

3,setlnitializers读取Spr ingBoot包下面的META- |NF/spring. factories获取到对应Appl icat ionContext Initializer装配到集合中,一共是6个

4,setListeners 读取SpringBoot包下面的META- INF/spring.factories获取到对应ApplicationListener装配到集合中


5,mainApplicationClass获取当前运行的主函数

6,调用SpringApplication的run方法实现启动

 

run方法内容:

7,StopWatch stopWatch = new StopWatch();

stopWatch.start();

   .....

stopWatch.stop();

记录springboot项目启动时间

8,getRunListeners(args)读取所有包里面的META-INF/spring.factories文件中的SpringApplicationRunListener类型存入到集合中

9,listeners.starting();循环执行集合中所有项的starting方法

10,ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments);

读取配置文件到springboot容器中

11,Banner printedBanner = printBanner(environment);

打印Banner图

12,context = createApplicationContext();

点击进入这个方法可以看到是判断webApplicationType类型

servlet类型,创建AnnotationConfigServletWebServerApplicationContext对象

13,refreshContext(context);  刷新上下文

14,开始创建tomcat容器

15,开始加载SpringMVC

16,afterRefresh(context, applicationArguments);

一个空的模板方法,可以供子类重写

17,listeners.started(context);

使用广播和回调机制通知监听器springboot容器已经启动成功

18,listeners.running(context);

使用广播和回调机制通知监听器springboot容器已经启动成功,可以正常运行项目

19,最后返回当前上下文对象

 


版权声明:本文为qq_41890624原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。