AutoConfiguration加载元数据和自动配置组件
@EnableAutoConfiguration 加载元数据配置加载元数据配置主要是为后续操作提供数据支持 。
我们先来看加载相关源代码的具体实现 , 该功能的代码依旧日在 selectlmpots 方法内 。
@Overridepublic String[] selectImports (AnnotationMetadata annotationMetadata) {AutoConfigurat ionMetadata autoConf igurationMetadata = http://kandian.youth.cn/index/AutoConfigurationMetadataLoader. loadMetadata(this. beanClassLoader);}
加载元数据的配置用到了AutoConfigurationMetadataLoader类提供的loadMetaData方法 , 该方法会默认加载类路径下 META-INF/springautoconfigure-metadata.properties 内的配置 。
final class AutoConfigurationMetadataLoader {//默认加载元数据的路径protected static final String PATH = "META- INF/spring- autoconfigure - metadata.properties";//默认调用改方法 , 传入默认 PATHstatic AutoConfigurat ionMetadata loadMetadata(ClassLoader classLoader )return loadMetadata(classLoader, PATH);static AutoConfigurationMetadata loadMetadata(ClassLoader classLoader, Stringpath) {try//获取数据存储 FEnumeration 中Enumeration
在上面的代码中 AutoConfigurationMetadataLoader 调用 ladMetadaClassLoadar cassLoaden)方法 , 会获取默认变量 PATH 指定的文件 , 然后加载并存储于 Enumeration 数据结构中 。 随后从变量 PATH 指定的文件中获取其中配置的属性存诸 Poperties 内 , 最终调用在该类内部实现的 AutoConfigurationMetadata 的子类的构造方法 。
spring-autoconfigure-metadata.properties 文件内的配置格式如下 。
自动配置类的全限定名.注解名称=值
如果 spnaotningre-etadata properties 文件内有多个值 , 就用英文逗号分隔 , 例如:
org. springframework . boot . autoconfigure . data. jdbc . IdbcRepositoriesAutoConfiguration . ConditionalOnClass=org. springframework. data. jdbc . repos itory. config.JdbcConfigurat ion, org. springframework. jdbc . core . namedpar am .NamedParameterJdbcOperations 。。。
为什么要加载此元数据呢?加载元数据主要是为了后续过滤自动配置使用 。 Spring Boot 使用-Annlation 的处理器来收集自动加载的条件 , 这些条件可以在元数据文件中进行配置 。 SpingBoot 会将收集好的 C@Confguration 进行一 次过滤 , 进而剔除不满足条件的配置类 。
在官方文档中已经明确指出 , 使用这种配置方式可以有效缩短 SpringBoot 的启动时间 , 减少@oniguraio 类的数量 , 从而减少初始化 ean 的耗时 。 后续章节中我们会看到过滤自动配置的具体使用方法 。
- 「技术」这样的思路,让控制器中按键处理数据的方法变得简单了
- IPsecVPN(数据通信)
- 一线大牛带你深入解析AutoConfiguration源码
- 学大数据是否有前途 如何系统掌握大数据技术
- 分析|用数据量化方法透视不确定性世界
- 微信官方发布国庆假期消费大数据,来瞧瞧你的钱都花到哪了
- 数据|女生从事数据分析岗位会面临哪些压力
- 海云数据:用AI让不可能变成可能
- 面向销售自动化的基于数据扩增和真实图像合成的鲁棒多目标检测
- 9款游戏13块SSD:测试固态硬盘对游戏加载速度影响有多大?