AutoConfiguration加载元数据和自动配置组件( 三 )

简单描述以上加载的过程就是: SpringFactoriesLoader 加载 器加载指定 ClassL oader 下面的所有 META-INF/spring.factories 文件 , 并将文件解析内容存于 Map>内 。 然后 , 通过 loadFactoryNames 传递过来的 class 的名称从 Map 中获得该类的配置列表 。
结 合 下 面 spring.factories 文 件 的 内 容 格 式,我 们 可 以 更 加 清 晰 地 了 解Map>中都存储了什么 。
# Auto Configureorg. springframework . boot . autoconfigure . EnableAutoConf iguration=\org. springframework . boot . autoconfigure . admin. Spr ingApplicat ionAdminJmxAutoConfig :uration, \org. springframework . boot . autoconfigure . aop . AopAutoConfiguration, \org . springframework . boot . autoconfigure . amqp . RabbitAutoConfiguration, \org. springframework . boot. autoconfigure . batch . BatchAutoConfiguration,\org. springfr amework . boot . autoconfigure . cache . CacheAutoConfiguration, \org. springframework . boot . autoconfigure . cassandra . CassandraAutoConfiguration,\ 。。。 以上代码仅以 EnableAutoConfiguration 配置的部分内容为例 , spring.factories 文件的基本格式为自动配置类的全限定名=值 , 与 2.3.5 节中介绍的元数据的格式很相似 , 只不过缺少了“ , 注解名称”部分 , 如果包含多个值 , 用英文逗号分隔 。
【AutoConfiguration加载元数据和自动配置组件】我们继续以 EnableAutoConfiguration 的配置为例 Map>内存储的对应数据就是key值为\/nliin/古org.springframework.boot.autoconfigure .EnableAutoConfiguration , Value 值为其等号后面以分号分割的各种 AutoConfiguration 类 。
当然 , spring.factories 文件内还有其他的配置 , 比如用于监听的 Listeners 和用于过滤的Filters 等 。 很显然 , 在加载自动配置组件时 , 此方法只用到了 EnableAutoConfiguration 对应的配置 。
因为程序默认加载的是 ClassLoader 下面的所有 META-INF/spring.factories文件中的配置 , 所以难免在不同的 jar 包中出现重复的配置 。 我们可以在源代码中使用 Set 集合数据不可重复的特性进行去重操作 。
protected finalList removeDuplicates(List list) {return new ArrayList<>(new LinkedHashSet<>(list));}本文给大家讲解的内容是AutoConfiguration加载元数据配置和加载自动配置组件

  1. 下篇文章给大家讲解的是AutoConfiguration 排除指定组件和过滤自动配置组件;
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!


推荐阅读