天天看點

Spring-core-SpringFactoriesLoader類

本類是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.xx

public class Name{
}      

然後執行代碼

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