本文共 973 字,大约阅读时间需要 3 分钟。
好遗憾啊,不就的将来就要辞职了,就要离开朝思暮想的马银霜了,好可惜,太可惜了,我真的好喜欢你----2021.01.26
本类是spring自动装配最为核心的类
1.loadFactoryNames方法
public static ListloadFactoryNames(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文件中的内容是这样子的// 注意,等号左右都必须是全限定名,而不是simple类名com.xx.name=com.xx.ys1,com.xx.ys2,com.xx.ys3
那么我们必须有一个类,这个类必须叫Name.java
package com.xxpublic class Name{}
然后执行代码
ClassLoader cl = Thread.currentThread().getContextClassLoader();Listnames=SpringFactoriesLoader.loadFactoryNames(Name.class, cl);
此时names的size=3,里面的值分别是ys1,ys2和ys3
NOTE:实际spring在使用当中,name通常都是一个接口的全限定名,而value则是该接口的部分实现类的全限定名,这些实现类,就是spring的基础设施类,spring会在需要这些实现类的地方,根据全限定名通过反射的方式创建这些类
转载地址:http://cvhws.baihongyu.com/