Springboot源码分析——自动配置原理

前言

Spring系列的框架大大简化了后端的开发,同时还可以集成多种场景。但是会还不行,还得知道它是如何实现的,这样我们遇到什么bug之类的才能游刃有余的化解,或者定制自己的场景或配置。俗话说:知其然知其所以然。所以从自动配置原理出发,深究源码。

注解配置

@SpringBootApplication

从主程序入手,主程序首先要有 @SpringBootApplication注解作为主程序入口。

@SpringBootApplication接口里又有三个注解 @SpringBootConfiguration@EnableAutoConfiguration@ComponentScan

@SpringBootApplication=
    @SpringBootConfiguration+
    @EnableAutoConfiguration+
    @ComponentScan
1. @SpringBootConfiguration

@SpringBootConfiguration里面没有什么就是一个@Configuration,代表当前是一个配置类,重点是其他两个注解,往下看其具体功能

2. @ComponentScan

@ComponentScan指定扫描哪些,Spring注解;

3. @EnableAutoConfiguration

@EnableAutoConfiguration由

@AutoConfigurationPackage@Import(AutoConfigurationImportSelector.class) 构成

@EnableAutoConfiguration =
	@AutoConfigurationPackage+
	@Import(AutoConfigurationImportSelector.class)

具体分析@AutoConfigurationPackage、@Import(AutoConfigurationImportSelector.class)注解功能

3.1 @AutoConfigurationPackage

@AutoConfigurationPackage导入Registrar组件

@Import(AutoConfigurationPackages.Registrar.class)
public @interface AutoConfigurationPackage {}

Registrar的作用:对主程序包下的bean批量注册
在这里插入图片描述
在这里插入图片描述

3.2 @Import(AutoConfigurationImportSelector.class)

1、利用getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一些组件
2、调用List configurations = getCandidateConfigurations(annotationMetadata, attributes)获取到所有需要导入到容器中的配置类
3、利用工厂加载 Map<String, List> loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的组件
4、从META-INF/spring.factories位置来加载一个文件。
默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件
spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories

文件里面写死了spring-boot一启动就要给容器中加载的所有配置类
spring-boot-autoconfigure-2.3.4.RELEASE.jar/META-INF/spring.factories

获取导入的组件名
在这里插入图片描述

获取当前类加载器下的配置类
在这里插入图片描述

获取过程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(虽然获得了其他包下也有META-INF/spring.factories,但是最后getOrDefault只获取当前类名下127个配置类组件)
在这里插入图片描述

3.3 特别说明:

按需配置

虽然我们127个场景的所有自动配置启动的时候默认全部加载。xxxxAutoConfiguration
但是会按照条件装配规则(@Conditional),最终会按需配置。

应用:

可以根据条件装配规则,自定义配置类,只要自己往容器里注册了对应的配置类,按照@ConditionalOnMissingBean规则,默认配置类就不会生效

例如:WebMvcAutoConfiguration

在这里插入图片描述

总结

@SpringBootApplication由三个主要注解构成

  1. @EnableAutoConfiguration: 启用Spring Boot 的自动配置机制
  2. @ComponentScan @Component:对应用程序所在的包启用扫描(见最佳实践
  3. @SpringBootConfiguration: 允许在上下文中注册额外的 bean 或导入额外的配置类。Spring 标准的替代方案@Configuration,可帮助您在集成测试中进行配置检测
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值