首页 > 其他分享 >SpringBoot的 META-INF/spring.factories有什么用

SpringBoot的 META-INF/spring.factories有什么用

时间:2022-10-22 22:33:08浏览次数:46  
标签:SpringBoot spring META result key new factories String


1,spring.factories文件中的内容,将来都会转化Properties对象。

spring.factories内容示例

org.springframework.data.repository.core.support.RepositoryFactorySupport=org.springframework.data.jdbc.repository.support.JdbcRepositoryFactory

等号左右就是key和value

右侧的值,如果是多个,可以用逗号分隔,

通常,左边都是接口,右边是实现。


对应的源代码为 SpringFactoriesLoader.loadFactoryNames

      Enumeration<URL> urls = (classLoader != null ?
classLoader.getResources(FACTORIES_RESOURCE_LOCATION) :
ClassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION));
result = new LinkedMultiValueMap<>();
while (urls.hasMoreElements()) {
URL url = urls.nextElement();
UrlResource resource = new UrlResource(url);
Properties properties = PropertiesLoaderUtils.loadProperties(resource);
for (Map.Entry<?, ?> entry : properties.entrySet()) {
String factoryClassName = ((String) entry.getKey()).trim();
for (String factoryName : StringUtils.commaDelimitedListToStringArray((String) entry.getValue())) {
result.add(factoryClassName, factoryName.trim());
}
}
}

这里 result是一个多值Map

result = new LinkedMultiValueMap<>();

每个key对应的,是一个List,可能是因为同一个接口,可以有许多的实现。


下图是某一次启动,根据所有的jar包中的spring.factories文件,找到的工厂的类名。key有19个,具体的类就有300个以上。


SpringBoot的 META-INF/spring.factories有什么用_spring

标签:SpringBoot,spring,META,result,key,new,factories,String
From: https://blog.51cto.com/u_15815563/5786159

相关文章