这篇文章解释了SpringBoot自动组装这两个配置文件spring.factories和spring-autoconfigure-metadata.properties的区别?看完上一篇文章,你可能会发现在阅读自动装配相关源码的过程中涉及到两个配置文件spring.factories和spring-autoconfigure-metadata.properties。如果仔细查看内容,您会觉得它们非常相似。那么spring.factories和spring-autoconfigure-metadata.properties有什么区别呢?spring.factories“约定大于配置”是Springboot中一个非常重要的思想。有一个约定,在SpringBoot启动的时候会加载META-INF/spring.factories配置文件。在spring.factories文件中,配置是以Key-Value的形式保存的。Key是需要解析的类的全路径名,Value是一个或多个类的全路径名,用逗号隔开,spring.factories文件可能不止一个。是SpringBoot自动装配解析的核心配置文件。以Feign为例:#spring.factoriesfileorg.springframework.boot.autoconfigure.EnableAutoCnotallow=\org.springframework.cloud.openfeign.ribbon.FeignRibbonClientAutoConfiguration,\org.springframework.cloud.openfeign.FeignAutoConfiguration,\org.springframework.云。openfeign.encoding.FeignAcceptGzipEncodingAutoConfiguration,\org.springframework.cloud.openfeign.encoding.FeignContentGzipEncodingAutoConfigurationspring-autoconfigure-metadata.propertiesspring.factories和spring-autoconfigure-metadata.properties类似,都是位于META-INF目录下的文件,两者以Key-Value的形式保存数据。不同的是后者的Key的格式是类的全路径名。Autowiringcondition,Value是类的全路径名,用逗号分隔。它管理Bean的组装条件。假设有两个类需要自动组装,但是有组装顺序要求,这个不能只靠spring.factories实现,所以有了spring-autoconfigure-metadata.properties,他的Key后面的附加名就代表对应的组装健康)状况。以Feign的配置文件为例:org.springframework.cloud.openfeign.encoding.FeignAcceptGzipEncodingAutoConfiguration.AutoCnotallow=org.springframework.cloud.openfeign.FeignAutoConfiguration上面的配置是说FeignAcceptGzipEncodingAutoConfiguration必须在FeignAutoConfiguration之后组装。如何生成spring-autoconfigure-metadata.properties如果你看过源码,你可能会发现在源码文件中并没有找到spring-autoconfigure-metadata.properties文件,而是在编译包中。到底是怎么回事?因为是自动生成的!对于类路径中的每个自动配置类,SpringBoot都要计算@ConditionalXXX条件值,用于决定是否加载自动配置及其需要的所有类,具体取决于SpringBoot中启动器的数量应用程序,这可能会耗费时间,为了改善启动时间,我们需要在pom.xml中添加一个依赖:-processor
