SpringBoot-@AutoConfiguration配置分析

我们都知道SpringBoot让我们的开发变得更简单,以前需要配置Spring、Mybatis等等配置文件,但是在SpringBoot中就不需要再做这些配置

有了解过的朋友应该会知道是因为SpringBoot的启动类上的@SpringBootApplication注解帮我们做了这些事,其中帮我们对配置完成自动装配的注解就是@EnableAutoConfiguration,今天我们就来看看这个注解底层是怎样工作的,不了解的朋友可以看看springboot中需要知道的一些配置 - 一个默默无闻的博客 (only-elder.top)

首先我们点进注解看一下

image-20210815175424367

可以看到这里导入了一个自动配置导入选择器,我们点进去可以看到覆写了这个方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@Override
/**选择导入**/
public String[] selectImports(AnnotationMetadata annotationMetadata) {
if (!isEnabled(annotationMetadata)) {
return NO_IMPORTS;
}

/**加载元数据,这里就在加载包中的配置文件获取元数据**/
AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader
.loadMetadata(this.beanClassLoader);

/**获取注解的属性**/
AnnotationAttributes attributes = getAttributes(annotationMetadata);

/**通过元数据和属性来获取配置**/
List<String> configurations = getCandidateConfigurations(annotationMetadata,
attributes);
configurations = removeDuplicates(configurations);
Set<String> exclusions = getExclusions(annotationMetadata, attributes);
checkExcludedClasses(configurations, exclusions);
configurations.removeAll(exclusions);
configurations = filter(configurations, autoConfigurationMetadata);
fireAutoConfigurationImportEvents(configurations, exclusions);
return StringUtils.toStringArray(configurations);
}

我们继续跟进,看它是怎么获取的元数据

1
protected static final String PATH = "META-INF/"+ "spring-autoconfigure-metadata.properties";

Comments: