spring.factories
“约定大于配置”在 Springboot 是一个很重要的思想,有一个约定就是 SpringBoot 启动的时候会加载 META-INF/spring.factories 配置文件。在 spring.factories 文件中,配置都是按照 Key-Value 形式保存的,Key 是需要解析类的全路径名,Value 是一个或多个类的全路径名,用逗号分隔,并且 spring.factories 文件可能有多个。
以 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.factories
配置哪些 Bean 进行自动装配 -
spring-autoconfigure-metadata.properties
控制 Bean 装配的条件信息,自动生成。