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则是该接口的部分实现类