SpringBoot自动装配原理

本文深入解析Spring Boot中自动配置的过程,包括@SpringApplication启动,@EnableAutoConfiguration选择器,工厂文件spring.factories的作用,以及AutoConfigurationImportSelector.selectImports方法的工作机制。重点讲解了属性自动配置和条件判断,如@Conditional注解的应用。

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

过程

@SpringBootApplication——>@EnableAutoConfiguration——>@Import提供,其导入的AutoConfigurationImportSelector的selectImports()方法

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
SpringFactoriesLoader.loadFactoryNames()扫描所有具有META-INF/spring.factories的jar包下面key是EnableAutoConfiguration全名的,所有自动配置类。

看看SpringBoot的spring-boot-autoconfigure-xxx.jar

该jar包里面就有META-INF/spring.factories文件。
请添加图片描述

这个spring.factories文件是一组一组的key=value的形式,其中一个key是EnableAutoConfiguration类的全类名,而它的value是一个xxxxAutoConfiguration的类名的列表,这些类名以逗号分隔。

自动配置核心方法

AutoConfigurationImportSelector.selectImports

该方法会找到自动配置的类,并给打了@Bean注解的方法创建对象。

postProcessBeanDefinitionRegistry方法是最核心的方法,它负责解析@Configuration、@Import、@ImportSource、@Component、@ComponentScan、@Bean等,完成bean的自动配置功能。

属性的自动配置

是通过ConfigurationPropertiesBindingPostProcessor类的postProcessBeforeInitialization方法完成
请添加图片描述

自动配置的生效条件

每个xxxxAutoConfiguration类上都可以定义一些生效条件,这些条件基本都是从@Conditional派生出来的。

常用的条件如下:

@ConditionalOnBean:当容器里有指定的bean时生效
@ConditionalOnMissingBean:当容器里不存在指定bean时生效
@ConditionalOnClass:当类路径下有指定类时生效
@ConditionalOnMissingClass:当类路径下不存在指定类时生效
@ConditionalOnProperty:指定的属性是否有指定的值,比如@ConditionalOnProperties(prefix=”xxx.xxx”, value=”enable”, matchIfMissing=true),代表当xxx.xxx为enable时条件的布尔值为true,如果没有设置的情况下也为true。

参考文章

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Adam`南帝·梁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值