Class SpringFactoriesLoader
SpringFactoriesLoader
loads and instantiates
factories of a given type from "META-INF/spring.factories" files which
may be present in multiple JAR files in the classpath. The spring.factories
file must be in Properties
format, where the key is the fully qualified
name of the interface or abstract class, and the value is a comma-separated list of
implementation class names. For example:
example.MyService=example.MyServiceImpl1,example.MyServiceImpl2where
example.MyService
is the name of the interface, and MyServiceImpl1
and MyServiceImpl2
are two implementations.- Since:
- 3.2
- Author:
- Arjen Poutsma, Juergen Hoeller, Sam Brannen
-
Field Summary
Fields -
Method Summary
Modifier and TypeMethodDescriptionstatic <T> List<T>
loadFactories
(Class<T> factoryType, ClassLoader classLoader) Load and instantiate the factory implementations of the given type from "META-INF/spring.factories", using the given class loader.loadFactoryNames
(Class<?> factoryType, ClassLoader classLoader) Load the fully qualified class names of factory implementations of the given type from "META-INF/spring.factories", using the given class loader.
-
Field Details
-
FACTORIES_RESOURCE_LOCATION
The location to look for factories.Can be present in multiple JAR files.
- See Also:
-
-
Method Details
-
loadFactories
Load and instantiate the factory implementations of the given type from "META-INF/spring.factories", using the given class loader.The returned factories are sorted through
AnnotationAwareOrderComparator
.If a custom instantiation strategy is required, use
loadFactoryNames(java.lang.Class<?>, java.lang.ClassLoader)
to obtain all registered factory names.As of Spring Framework 5.3, if duplicate implementation class names are discovered for a given factory type, only one instance of the duplicated implementation type will be instantiated.
- Parameters:
factoryType
- the interface or abstract class representing the factoryclassLoader
- the ClassLoader to use for loading (can benull
to use the default)- Throws:
IllegalArgumentException
- if any factory implementation class cannot be loaded or if an error occurs while instantiating any factory- See Also:
-
loadFactoryNames
public static List<String> loadFactoryNames(Class<?> factoryType, @Nullable ClassLoader classLoader) Load the fully qualified class names of factory implementations of the given type from "META-INF/spring.factories", using the given class loader.As of Spring Framework 5.3, if a particular implementation class name is discovered more than once for the given factory type, duplicates will be ignored.
- Parameters:
factoryType
- the interface or abstract class representing the factoryclassLoader
- the ClassLoader to use for loading resources; can benull
to use the default- Throws:
IllegalArgumentException
- if an error occurs while loading factory names- See Also:
-