【源码分析】 DEBUG SpringBoot自动装配源码

SpringBoot自动自动装配

SpringBoot启动流程

注意:此博文只为记录自己DEBUG 源码核心过程,大家可能看不太明白,还请谅解!

启动准备

  1. 启动类为入口

在这里插入图片描述

  1. 进入run方法

在这里插入图片描述

  1. 创建了一个SpringBoot程序

在这里插入图片描述

  1. SpringApplication构造器

在这里插入图片描述

  1. 进入getSpringFactoriesInstances方法

在这里插入图片描述

  1. 进入loadFactoryNames方法

在这里插入图片描述

  1. 进入loadSpringFactories

在这里插入图片描述

这里加载的资源路径正是spring.factories的路径!

回到getSpringFactoriesInstances方法

在这里插入图片描述

​ 通过反射实例化

在这里插入图片描述

  1. 加载完spring.factories 中ApplicationContextInitializer下的类后,一共加载了七个类

在这里插入图片描述

​ 这七个类分别是:

在这里插入图片描述

在这里插入图片描述

  1. 将获取的类集合设置到initializers属性

在这里插入图片描述

  1. ApplicationListener和上面类似

    在这里插入图片描述

运行的核心步骤

  1. 环境准备

在这里插入图片描述

在这里插入图片描述

  1. 进入prepareContext方法

在这里插入图片描述

  1. 在prepareContext方法末尾加载主启动类

    在这里插入图片描述

  2. 进入load()方法

    在这里插入图片描述

    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在@SpringBootApplication =》 @SpringBootConfiguration =》 @Configuration中

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 进入AbstractApplicationContext.refresh()方法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

看这个类,使用全局搜索发现没有这个类

在这里插入图片描述

搜索AnnotationConfigUtils类,发现里面有个属性,他的值和刚才的类一样

在这里插入图片描述

找到这个属性的使用方法,发现实际是操作了一个ConfigurationClassPostProcessor类

在这里插入图片描述

这个类刚好是BeanFactoryPostProcessor的扩展类

在这里插入图片描述

继续往下执行,并进入这个方法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

此时程序就进入前面说的ConfigurationClassPostProcessor类了

在这里插入图片描述

如果没有被@Configuration修饰则直接返回,显然这里主启动类是被修饰的,所以继续往下执行

在这里插入图片描述

这里对主启动类进行排序
在这里插入图片描述

解析被@Configuration修饰的类

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

直到进入到

在这里插入图片描述

找到这个方法才是真正解析的逻辑

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

重点说一下@Import

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

主要有一下两个

在这里插入图片描述

在这里插入图片描述

继续执行,返回到parse方法

在这里插入图片描述

找到最下面的的process方法
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这里的EnableAutoConfiguration类和spring.factories中的对应

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42380734/article/details/108088513