SpringBoot核心原理--自动装配

本文深入探讨了SpringBoot的自动装配机制,从@SpringBootApplication注解开始,详细解释了@SpringBootConfiguration和@EnableAutoConfiguration的作用。文章重点分析了AutoConfigurationImportSelector类,包括selectImports、getAutoConfigurationEntry和getCandidateConfigurations方法,揭示了如何根据条件注解和spring.factories文件来确定自动配置类的加载。最后,介绍了SpringFactoriesLoader在加载自动装配类过程中的关键作用。

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

springboot开箱即用,其实实现了自动装配。springboot并没有新技术,还是基于spring。也就是为什么我们配置xml已经就会引用相对应的类。比如 在pom文件引入相应的java包,那么就会启动相应的配置类。无需我们手动配置信息。

1,进入@SpringBootApplication注解。

自从进入 @SpringBootApplication注解以后,所有的类都是在 package org.springframework.boot.autoconfigure;包下,这包就是实现自动装配功能
在这里插入图片描述

1.1进入@SpringBootConfiguration注解

在这里插入图片描述

1.2进入@EnableAutoConfiguration注解

在这里插入图片描述
接来下就是重点了 springboot实现 动态注入的两种方式:
1 ,实现 ImportSelector接口
2,实现 ImportBeanDefinitionRegistrar

这里面有个demo可以深刻理解spring.factories文件的作用。

2,关注@AutoConfigurationPackage注解

2.1,关注@Import(EnableAutoConfigurationImportSelector.class)注解

进入AutoConfigurationImportSelector类,
看到一行注释,表明AutoConfigurationImportSelector类的作用就是自动配置。在这里插入图片描述
那么 AutoConfigurationImportSelector类如何实现自动配置?

首先 AutoConfigurationImportSelector实现了ImportSeletor接口

在这里插入图片描述
这个ImportSelector的文档上说:其主要作用是收集需要导入的配置类,实现类之一是AutoConfigurationImportSelector。

接下来就是AutoConfigurationImportSelector类 的作用 ;
其中最主要的方法就是:selectImports和getAutoConfigurationEntry,getAutoConfigurationEntry里面又有一个getCandidateConfigurations方法,一共三个方法。

selectImports方法

红色框部分的作用就是:当加载spring.factores的时候之前,在被spring容器管理之前,会先检查"META-INF/" + “spring-autoconfigure-metadata.properties” (图3)下条件注解,
所谓条件注解就是
加载条件注解:
ConditionalOnClass
AutoConfigureAfter
ConditionalOnBean
ConditionalOnSingleCandidate
如果不满足条件就不会被注入,或者说指定注入的条件。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration.ConditionalOnBean=javax.sql.DataSource。表示 当前被添加ConditionalOnBean注解的类存在则实例化avax.sql.DataSource,如果不存在则不实例化avax.sql.DataSource

AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader
				.loadMetadata(this.beanClassLoader);
autoConfigurationMetadata 获得的就是项目上所有带有条件注解的类

getAutoConfigurationEntry方法

这个方法的作用是:getCandidateConfigurations方法,他会去扫描 METX-INF /spring.factores下的AutoConfigure的内容,键org.springframework.boot.autoconfigure.EnableAutoConfiguration。
根据 spring-autoconfigure-metadata.properties里面的条件注解,去扫描 spring.factories对应的类,根据条件注解判断这些类要不要加载,
在这里插入图片描述
在getAutoConfigurationEntry方法中会执行一个方法getCandidateConfigurations

getCandidateConfigurations

其中有一个方法 getCandidateConfigurations,看到有一个 SpringFactoriesLoader,加载的资源文件是 classpath/META INF/spring.factories,
SpringFactoriesLoader 的作用是从classpath/META INF/spring.factories 文 件中,根据 key 来
加载对应的类到 spring IoC 容器中。
在这里插入图片描述
在这里插入图片描述
下面是 META-INF/spring.factories中自动装配的内容
图3

List<String> configurations =
 getCandidateConfigurations(annotationMetadata, attributes);
 configurations 里面包含的是除了条件注解以外的注解,

接下来在 getAutoConfigurationEntry方法里面的代码 ,就是执行过滤exclusions的配置

到此,需要自动装配的类加载完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值