在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ Springboot添加Devtools包是怎么加載的

Springboot添加Devtools包是怎么加載的

看Springboot源碼的時候,SpringFactoriesLoader類中l(wèi)oadFactoryNames方法里:

public static List<String> loadFactoryNames(Class<?> factoryClass, ClassLoader classLoader) {
        String factoryClassName = factoryClass.getName();
        try {
            Enumeration<URL> urls = (classLoader != null ? classLoader.getResources(FACTORIES_RESOURCE_LOCATION) :
                    ClassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION));
            List<String> result = new ArrayList<String>();
            while (urls.hasMoreElements()) {
                URL url = urls.nextElement();
                Properties properties = PropertiesLoaderUtils.loadProperties(new UrlResource(url));
                String factoryClassNames = properties.getProperty(factoryClassName);
                result.addAll(Arrays.asList(StringUtils.commaDelimitedListToStringArray(factoryClassNames)));
            }
            return result;
        }

當(dāng)添加了springboot-devtools依賴后classLoader.getResources(FACTORIES_RESOURCE_LOCATION)加載的是spring-boot-devtools包中的META-INF/spring.factories文件,而去掉devtools的依賴之后加載的是spring-boot包中的META-INF/spring.factories文件,這是怎么實現(xiàn)的?為什么會這樣?

回答
編輯回答
硬扛

Enumeration<URL> urls = (classLoader != null ? classLoader.getResources(FACTORIES_RESOURCE_LOCATION):ClassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION));
如果是spring-boot-devtools 這里的classloader是RestartClassLoader 所以加載的都是
spring-boot-devtools包中的META-INF/spring.factories文件中的類


剛剛又看了一下 發(fā)現(xiàn)都會加載的好像,所有的jar包下的META-INF/spring.factories都會加載
但是spring-boot-devtools 使用的類加載器是RestartClassLoader

2017年6月2日 10:16