擦边球网站怎么做,推广平台有哪些洛克,做业务的网站,中国建设银行官网企业网银登录前言
本文简要介绍SpringBoot的自动配置原理。
本文讲述的SpringBoot版本为#xff1a;3.1.2。
前置知识
在看原理介绍之前#xff0c;需要知道Import注解的作用#xff1a;
可以导入Configuration注解的配置类、声明Bean注解的bean方法#xff1b;可以导入ImportSele…前言
本文简要介绍SpringBoot的自动配置原理。
本文讲述的SpringBoot版本为3.1.2。
前置知识
在看原理介绍之前需要知道Import注解的作用
可以导入Configuration注解的配置类、声明Bean注解的bean方法可以导入ImportSelector的实现类【自动配置原理用到注解的这个作用】可以导入ImportBeanDefinitionRegistrar的实现类。
原理介绍
从启动类入手
一个常规的SpringBoot项目的启动类内容如下 从启动类上的SpringBootApplication入手 三个注解箭头指示的注解各有各的作用
SpringBootConfiguration组合了Configuration注解表示这是一个配置类EnableAutoConfiguration允许自动配置ComponentScanSpring的组件扫描默认扫描main方法所在类所在的包及其子包
其中第二个注解EnableAutoConfiguration是实现自动配置的关键。
从EnableAutoConfiguration注解入手 可以看到该注解中有一个Import注解先说结论在AutoConfigurationImportSelector类中加载了哪些需要自动配置的Bean并完成加载注入到IOC容器中。
到AutoConfigurationImportSelector类
从AutoConfigurationImportSelector类入手 可以看出AutoConfigurationImportSelector类是org.springframework.boot.autoconfigure包下的一个类实现了DeferredImportSelector等接口
org.springframework.boot.autoconfigure望名生意自动配置就是在该包里面规定了哪些Bean需要配置。DeferredImportSelector该接口是实现自动配置的关键里面的selectImports方法规定了哪些Bean需要自动配置。
往下滑看AutoConfigurationImportSelector类的selectImports方法 红框所示代码返回了需要自动配置的Bean列表。
从this.getAutoConfigurationEntry方法入手
protected AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) {if (!this.isEnabled(annotationMetadata)) {return EMPTY_ENTRY;} else {AnnotationAttributes attributes this.getAttributes(annotationMetadata);// 获取该类所在包下的META-INF/spring/目录中以.imports为后缀结尾的文件里面的内容作为候选配置列表ListString configurations this.getCandidateConfigurations(annotationMetadata, attributes);// 去除重复的配置configurations this.removeDuplicates(configurations);// 排除部分元注解信息中需要排除的配置SetString exclusions this.getExclusions(annotationMetadata, attributes);this.checkExcludedClasses(configurations, exclusions);configurations.removeAll(exclusions);// 过滤掉一些暂时不生效的配置加了如下注解的beanOnxxxConditionconfigurations this.getConfigurationClassFilter().filter(configurations);this.fireAutoConfigurationImportEvents(configurations, exclusions);return new AutoConfigurationEntry(configurations, exclusions);}
}该方法中代码的逻辑如上。就剩一个this.getCandidateConfigurations方法需要再探究里面规定了从哪个地方寻找需要配置的bean列表。
从this.getCandidateConfigurations方法入手 再进入箭头所指向的load方法 可以看到该方法往包下的META-INF/spring/目录中寻找后缀名为.imports的文件。
到org.springframework.boot.autoconfigure包中看看
从idea左侧的依赖列表里面查看 点开文件里面任意一个类 都是一个自动配置类定义有相应的Bean方法。
至此SpringBoot的自动配置原理就明白了。
原理总结
启动类中有一个SpringBootApplication注解包含了EnableAutoConfiguration代表开启自动装配EnableAutoConfiguration注解里面组合了一个Import注解这个注解是实现自动配置的关键。Import注解最终的作用可以总结如下到spring-boot-autoconfigure包下的META-INF/spring目录中寻找.imports结尾的文件这里面列举了所有需要自动配置的类程序会读取这些类并加载但这些类不会全部加载因为有的类上面有条件注解需要满足特定条件时才会生效 spring-boot-autoconfigure包下的AutoConfigurationImportSelector类实现了ImportSelector并重写了selectImports方法在selectImports方法中定义类自动配置类的加载位置。还有一些配置类的去重操作、排除操作等。