SpringFactoriesLoader tolerates whitespace around class names
Issue: SPR-17413
(cherry picked from commit dd2ce20687)
This commit is contained in:
@@ -19,7 +19,6 @@ package org.springframework.core.io.support;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Enumeration;
|
||||
import java.util.List;
|
||||
@@ -82,9 +81,9 @@ public abstract class SpringFactoriesLoader {
|
||||
* to obtain all registered factory names.
|
||||
* @param factoryClass the interface or abstract class representing the factory
|
||||
* @param classLoader the ClassLoader to use for loading (can be {@code null} to use the default)
|
||||
* @see #loadFactoryNames
|
||||
* @throws IllegalArgumentException if any factory implementation class cannot
|
||||
* be loaded or if an error occurs while instantiating any factory
|
||||
* @see #loadFactoryNames
|
||||
*/
|
||||
public static <T> List<T> loadFactories(Class<T> factoryClass, @Nullable ClassLoader classLoader) {
|
||||
Assert.notNull(factoryClass, "'factoryClass' must not be null");
|
||||
@@ -111,8 +110,8 @@ public abstract class SpringFactoriesLoader {
|
||||
* @param factoryClass the interface or abstract class representing the factory
|
||||
* @param classLoader the ClassLoader to use for loading resources; can be
|
||||
* {@code null} to use the default
|
||||
* @see #loadFactories
|
||||
* @throws IllegalArgumentException if an error occurs while loading factory names
|
||||
* @see #loadFactories
|
||||
*/
|
||||
public static List<String> loadFactoryNames(Class<?> factoryClass, @Nullable ClassLoader classLoader) {
|
||||
String factoryClassName = factoryClass.getName();
|
||||
@@ -135,9 +134,10 @@ public abstract class SpringFactoriesLoader {
|
||||
UrlResource resource = new UrlResource(url);
|
||||
Properties properties = PropertiesLoaderUtils.loadProperties(resource);
|
||||
for (Map.Entry<?, ?> entry : properties.entrySet()) {
|
||||
List<String> factoryClassNames = Arrays.asList(
|
||||
StringUtils.commaDelimitedListToStringArray((String) entry.getValue()));
|
||||
result.addAll((String) entry.getKey(), factoryClassNames);
|
||||
String factoryClassName = ((String) entry.getKey()).trim();
|
||||
for (String factoryName : StringUtils.commaDelimitedListToStringArray((String) entry.getValue())) {
|
||||
result.add(factoryClassName, factoryName.trim());
|
||||
}
|
||||
}
|
||||
}
|
||||
cache.put(classLoader, result);
|
||||
|
||||
Reference in New Issue
Block a user