springboot的启动时的一个自动装配过程

IT-QI 2021-01-21 10:04:21
SpringBoot 启动 自动 一个 启动时


SpringApplication.run()

我看网上好多介绍springboot自动装配过的文章时,上来就直接说 @SpringBootApplication 注解是一个复合注解,从这个注解开始介绍springboot是如何将配置项进行加载的。其实我觉得难道不应该是先启动了spring的容器,然后才能扫到注解,然后才能解析注解吗?也可能是大家觉得创建容器刷新容器这些基础操作都默认知道的,所以就都没说。

但我在分析springboot自动装配的时候,要先从 SpringApplication.run() 方法开始。

 

我们进入到 SpringApplication 这个类中看一下 run() 方法的核心实现,差不多每一行我都加上了注释了。

SpringApplication.run() 方法中,我把关键点用序号标识出来了。

  1. 第一个就是创建ApplicationContext容器。
  2. 第二个是刷新ApplicationContext容器。

在创建ApplicationContext时,会根据用户是否明确设置了 ApplicationContextClass 类型以及初始化阶段的推断结果,决定为当前SpringBoot应用创建什么类型的ApplicationContext。

创建完成ApplicationContext容器后,我们接着回到 SpringApplication.run() 方法中。

下面开始初始化各种插件在异常失败后给出的提示。

然后执行准备刷新上下文的一些操作。其实 prepareContext() 方法也是非常关键的,它起到了一个承上启下的作用。下面我们来看一下 prepareContext() 方法里面具体执行了什么。

关键的地方我也标注出来了,主要就是 getAllSoures() 方法,这个方法中,获取到的一个source就是启动类DemoApplication。