Spring-SpringFactoriesLoader类

1.loadFactoryNames方法

public static List<String> loadFactoryNames(Class<?> factoryType, @Nullable ClassLoader classLoader) {
		String factoryTypeName = factoryType.getName();
		return loadSpringFactories(classLoader).getOrDefault(factoryTypeName, Collections.emptyList());
	}

该方法看似复杂其实目的很简单,就是从去jar包下META-INF文件夹下的spring.factories文件(可以理解成properties文件),读取key值,拿到value,因为多个value值的时候spring会用逗号分开,所以该类自动分割逗号,将多个值放到一个list里并且返回,下面举例
比如spring.factories文件中的内容是这样子的

name=ys1,ys2,ys3

那么我们必须有一个类,这个类必须叫Name.java

public class Name{
}

然后执行代码

ClassLoader cl =  Thread.currentThread().getContextClassLoader();
List<String> names=SpringFactoriesLoader.loadFactoryNames(Name.class, cl);

此时names的size=3,里面的值分别是ys1,ys2和ys3

NOTE:实际spring在使用当中,name通常都是一个接口名,而value则是该接口的部分实现类

发布了157 篇原创文章 · 获赞 26 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/u011624903/article/details/75344378