可能是最卷的Spring源码系列(十九):springboot

本文深入剖析SpringBoot的自动配置原理,介绍了如何通过@SpringBootApplication注解实现自动配置与自动包扫描,详细解读了从读取配置文件到加载配置类的全过程。

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

作为spring源码分析的最后一篇,我们会分析springboot的源码,springboot比起spring+springmvc主要多了两点功能,一个是自动配置,一个是整合了嵌入式的sevlet容器。

自动配置

自动配置主要是由@SpringBootApplication注解实现的,这个注解除了实现了自动配置以外,还有自动包扫描,我们分别来讲这两部分
在这里插入图片描述
SpringBootApplication也是一个组合注解,主要功能在@EnableAutoConfiguration里面
在这里插入图片描述
@Import(AutoConfigurationImportSelector.class)实现了自动配置,@AutoConfigurationPackage实现了自动包扫描

@Import(AutoConfigurationImportSelector.class)

这是一个DeferredImportSelector,所以我们直接看他的getImportGroup
在这里插入图片描述
进入AutoConfigurationGroup的process方法
在这里插入图片描述

在这里插入图片描述
这个方法完成了autoConfig的扫描
在这里插入图片描述loadFactoryNames
在这里插入图片描述
loadSpringFactories
在这里插入图片描述
可以看到这里去META-INF/spring.factories里面读取类名,然后加载到容器中,所以只要我们配置到META-INF/spring.factories中的类都会被自动加入到容器中,这就是自动配置的原理

@AutoConfigurationPackage

又是一个组合注解
在这里插入图片描述
AutoConfigurationPackages.Registrar类
在这里插入图片描述
在这里插入图片描述
可以看出,这里往容器中注入了一个BasePackagesBeanDefinition,该类实现了GenericBeanDefinition
在这里插入图片描述
获取到所有的包名
CachingMetadataReaderFactoryPostProcessor会处理这些包名,包包里的类注入到容器

自动启动原理

跟踪一下run方法的执行
在这里插入图片描述
在这里插入图片描述
进入refreshContext,跟踪到最后就是刷新了容器
在这里插入图片描述

spring容器的类型为AnnotationConfigServletWebServerApplicationContext

这里重写了onRefresh
在这里插入图片描述

在这里插入图片描述
这个方法完成了sevlet容器的创建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值