SpringBoot源码(一)启动流程

138 阅读2分钟

1 启动注解

image.png

@SpringBootApplication

此注解是SpringBoot框架最核心的注解,目的是开启自动配置,是整个SpringBoot应用程序的入口 ,它包含了三个子注解

  1. @SpringBootConfiguration

继承@Configuration,与其功能一致

  1. @EnableAutoConfiguration

开启自动配置

  1. @ComponentScan

配置扫描路径、扫描过滤器

2 启动方法

SpringApplication.run(Application.class, args);

image.png

run方法内会new一个SpringApplication对象,然后再执行它的run方法

3 SpringApplication对象

SpringApplication对象的构造方法中,初始化了一些重要的属性

image.png

1) resourceLoader

资源加载器

2) webApplicationType

web的应用类型(NONE-普通应用、REACTIV-web flux应用、SERVLET-web应用),deduceFromClasspath方法中,根据是否存在相应的指示类推测应用类型

image.png

image.png

image.png

3) bootstrapRegistryInitializers

引导程序初始化器,用getSpringFactoriesInstances方法,从spring.factories文件中获得BootstrapRegistryInitializer对象

image.png

4) initializers

初始化器,从spring.factories文件中获得ApplicationContextInitializer对象

5) listeners

监听器,从spring.factories文件中获得ApplicationListener对象

6) mainApplicationClass

main方法所在类的Class对象

image.png

根据main方法名返回启动类的Class对象

4 SpringApplication对象的run方法

运行时监听器

image.png

image.png

从spring.factories文件中获得所有运行时监听器对象,之后在启动springboot的过程中调用starting、contextPrepared、contextLoaded、started、ready等方法将启动相关事件发布出去

创建容器

run方法中最主要的操作是根据SpringApplication构造方法中产生的参数创建Spring容器

image.png

image.png

创建容器方法中用到的webApplicationType属性是上文提到的创建SpringApplication对象时根据指示类生成的web应用类型

准备工作

image.png

做刷新容器准备工作时会依次执行应用注册器、发布contextPrepared事件、添加Banner、把run方法中传进来的配置类注册到spring容器中

刷新容器

image.png

刷新spring容器,解析配置类,扫描、启动webserver

callRuners

在started和ready事件之间会执行添加到容器中的ApplicationRunner和CommandLineRunner对象的run方法,获得执行jar文件时传入的参数