SpringBoot 这两个配置文件有什么区别?
创始人
2024-05-02 13:28:44

本文讲解了关于 SpringBoot 自动装配的两个配置文件spring.factories 和 spring-autoconfigure-metadata.properties有什么区别?

点击上方“后端开发技术”,选择“设为星标” ,优质资源及时送达

读过上一片文章你可能会发现,在自动装配相关源码阅读的过程中涉及到了两个配置文件 spring.factoriesspring-autoconfigure-metadata.properties,如果查看过内容,你会觉得他们非常相似。

那么 spring.factories 和 spring-autoconfigure-metadata.properties有什么区别呢?

SpringBoot 自动装配原理,一文掌握!|原创

2022-12-27

56df01ec944bf0fc71d02c6c856b6f22.jpeg

spring.factories

“约定大于配置”在 Springboot 是一个很重要的思想,有一个约定就是 SpringBoot 启动的时候会加载 META-INF/spring.factories 配置文件。在 spring.factories 文件中,配置都是按照 Key-Value 形式保存的,Key 是需要解析类的全路径名,Value 是一个或多个类的全路径名,用逗号分隔,并且 spring.factories 文件可能有多个。Spring Boot 自动装配解析的核心配置文件就是它。

以 Feign 举例:

# spring.factories 文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.openfeign.ribbon.FeignRibbonClientAutoConfiguration,\
org.springframework.cloud.openfeign.FeignAutoConfiguration,\
org.springframework.cloud.openfeign.encoding.FeignAcceptGzipEncodingAutoConfiguration,\
org.springframework.cloud.openfeign.encoding.FeignContentGzipEncodingAutoConfiguration

spring-autoconfigure-metadata.properties

spring.factories 和 spring-autoconfigure-metadata.properties 类似,都是位于 META-INF 目录下的文件,并且都是 Key-Value 形式保存数据。不同的是 ,后者的 Key 的格式为 类的全路径名.自动装配条件,Value 为 类的全路径名,使用逗号分隔。它管理的是 Bean 的装配条件。

假设有两个类需要自动装配,但是有装配的顺序要求,这就无法仅仅依靠 spring.factories 来实现,于是有了 spring-autoconfigure-metadata.properties,他的 Key 后面追加名字就代表了对应的装配条件。

以 Feign 的配置文件举例:

org.springframework.cloud.openfeign.encoding.FeignAcceptGzipEncodingAutoConfiguration.AutoConfigureAfter=org.springframework.cloud.openfeign.FeignAutoConfiguration

上面这段配置就代表 FeignAcceptGzipEncodingAutoConfiguration 必须在 FeignAutoConfiguration 装配之后再装配。

如何生成 spring-autoconfigure-metadata.properties

如果你阅读过源码,可能会发现源码文件中并没有找到 spring-autoconfigure-metadata.properties 文件,但是编译好的包中却有,这是怎么一回事呢?

因为它是自动生成的!

对于类路径上的每个自动配置类,Spring Boot 必须计算 @ConditionalXXX 条件值,用于决定是否加载自动配置及其所需的所有类,根据 Spring 启动应用程序中 starter 的数量,这可能会花费很多时间,为了提升启动时间,我们需要在 pom.xml 中添加一个依赖:

  org.springframework.boot  spring-boot-autoconfigure-processor true  

这样它会解析各种 condition,生成 spring-autoconfigure-metadata.properties 文件。这样,Spring Boot 在启动期间读取这些元数据,可以过滤出不满足条件的配置,而不必实际检查这些类,提升启动速度。

总结

  • spring.factories :用于配置哪些 Bean 进行自动装配。

  • spring-autoconfigure-metadata.properties :控制 Bean 装配的条件信息,自动生成。

如果对你有帮助,欢迎点赞、评论或分享,感谢阅读!

精通MyBatis原理,看这两篇就够了!|原创

2022-12-25

b2df3c485b44f754e38c261b981690da.jpeg

大厂程序员常用的几款「高效工具」,已整理资源!

2022-12-20

1b1f2e4e731755b31f4799a2e398aa80.jpeg

MySQL主从复制太慢,怎么办?

2022-12-15

f67cfd1a5f7e640f941c2fb81036024e.jpeg

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...