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

本文详细解析了SpringBoot的启动流程,从启动类入口开始,深入探讨了run方法的执行过程,包括SpringApplication构造器、spring.factories资源的加载、主启动类的解析以及ConfigurationClassPostProcessor类的作用。通过跟踪关键方法,如getSpringFactoriesInstances、loadFactoryNames和parse,揭示了SpringBoot如何自动装配组件和初始化应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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中的对应

在这里插入图片描述

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值