本類是spring自動裝配最為核心的類
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文件夾(maven項目可直接在src/main/resource文件夾下新建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{
}
Springboot框架、然后執行代碼
ClassLoader cl = Thread.currentThread().getContextClassLoader();
List<String> names=SpringFactoriesLoader.loadFactoryNames(Name.class, cl);
此時names的size=3,里面的值分別是
“com.xx.ys1”,
“com.xx.ys2”,
“com.xx.ys3”
因為這些值都是全限定名,所以spring就會根據這些值在后續的代碼中實例化這些類
NOTE:實際spring在使用當中,name通常都是一個接口的全限定名,而value則是該接口的部分實現類的全限定名,這些實現類,就是spring的基礎設施類,spring會在需要這些實現類的地方,根據全限定名通過反射的方式創建這些類
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态