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个以上。