diff --git a/spring-core/src/main/java/org/springframework/core/io/support/SpringFactoriesLoader.java b/spring-core/src/main/java/org/springframework/core/io/support/SpringFactoriesLoader.java index fa378ed063..0f3d891bcb 100644 --- a/spring-core/src/main/java/org/springframework/core/io/support/SpringFactoriesLoader.java +++ b/spring-core/src/main/java/org/springframework/core/io/support/SpringFactoriesLoader.java @@ -57,14 +57,14 @@ import org.springframework.util.StringUtils; */ public abstract class SpringFactoriesLoader { - private static final Log logger = LogFactory.getLog(SpringFactoriesLoader.class); - /** * The location to look for factories. *

Can be present in multiple JAR files. */ public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories"; + private static final Log logger = LogFactory.getLog(SpringFactoriesLoader.class); + /** * Load and instantiate the factory implementations of the given type from @@ -74,9 +74,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 List loadFactories(Class factoryClass, ClassLoader classLoader) { Assert.notNull(factoryClass, "'factoryClass' must not be null"); @@ -103,8 +103,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 loadFactoryNames(Class factoryClass, ClassLoader classLoader) { String factoryClassName = factoryClass.getName(); @@ -115,14 +115,16 @@ public abstract class SpringFactoriesLoader { 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))); + String propertyValue = properties.getProperty(factoryClassName); + for (String factoryName : StringUtils.commaDelimitedListToStringArray(propertyValue)) { + result.add(factoryName.trim()); + } } return result; } catch (IOException ex) { - throw new IllegalArgumentException("Unable to load [" + factoryClass.getName() + - "] factories from location [" + FACTORIES_RESOURCE_LOCATION + "]", ex); + throw new IllegalArgumentException("Unable to load factories from location [" + + FACTORIES_RESOURCE_LOCATION + "]", ex); } } diff --git a/spring-core/src/test/java/org/springframework/core/io/support/SpringFactoriesLoaderTests.java b/spring-core/src/test/java/org/springframework/core/io/support/SpringFactoriesLoaderTests.java index 4de87d2c72..56939b9cfc 100644 --- a/spring-core/src/test/java/org/springframework/core/io/support/SpringFactoriesLoaderTests.java +++ b/spring-core/src/test/java/org/springframework/core/io/support/SpringFactoriesLoaderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,8 +33,7 @@ public class SpringFactoriesLoaderTests { @Test public void loadFactoriesInCorrectOrder() { - List factories = SpringFactoriesLoader - .loadFactories(DummyFactory.class, null); + List factories = SpringFactoriesLoader.loadFactories(DummyFactory.class, null); assertEquals(2, factories.size()); assertTrue(factories.get(0) instanceof MyDummyFactory1); assertTrue(factories.get(1) instanceof MyDummyFactory2); @@ -46,9 +45,9 @@ public class SpringFactoriesLoaderTests { } @Test - public void loadPackagePrivateFactory() throws Exception { - List factories = SpringFactoriesLoader - .loadFactories(DummyPackagePrivateFactory.class, null); + public void loadPackagePrivateFactory() { + List factories = + SpringFactoriesLoader.loadFactories(DummyPackagePrivateFactory.class, null); assertEquals(1, factories.size()); assertTrue((factories.get(0).getClass().getModifiers() & Modifier.PUBLIC) == 0); } diff --git a/spring-core/src/test/resources/META-INF/spring.factories b/spring-core/src/test/resources/META-INF/spring.factories index ab64ffe1b6..3c2c4e9d95 100644 --- a/spring-core/src/test/resources/META-INF/spring.factories +++ b/spring-core/src/test/resources/META-INF/spring.factories @@ -1,5 +1,5 @@ -org.springframework.core.io.support.DummyFactory=\ -org.springframework.core.io.support.MyDummyFactory2,\ +org.springframework.core.io.support.DummyFactory =\ +org.springframework.core.io.support.MyDummyFactory2, \ org.springframework.core.io.support.MyDummyFactory1 java.lang.String=\