public final class SpringFactoriesLoader extends ObjectSE
SpringFactoriesLoader
は、クラスパスの複数の JAR ファイルに存在する可能性のある "META-INF/spring.factories" ファイルから、指定された型のファクトリをロードしてインスタンス化します。spring.factories
ファイルは Properties
SE 形式である必要があります。ここで、キーはインターフェースまたは抽象クラスの完全修飾名であり、値は実装クラス名のコンマ区切りのリストです。例:
example.MyService=example.MyServiceImpl1,example.MyServiceImpl2ここで、
example.MyService
はインターフェースの名前であり、MyServiceImpl1
と MyServiceImpl2
は 2 つの実装です。修飾子と型 | フィールドと説明 |
---|---|
static StringSE | FACTORIES_RESOURCE_LOCATION ファクトリを探す場所です。 |
修飾子と型 | メソッドと説明 |
---|---|
static <T> ListSE<T> | loadFactories(ClassSE<T> factoryType, ClassLoaderSE classLoader) 指定されたクラスローダーを使用して、指定された型のファクトリ実装を "META-INF/spring.factories" からロードしてインスタンス化します。 |
static ListSE<StringSE> | loadFactoryNames(ClassSE<?> factoryType, ClassLoaderSE classLoader) 指定されたクラスローダーを使用して、指定された型のファクトリ実装の完全修飾クラス名を "META-INF/spring.factories" からロードします。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public static <T> ListSE<T> loadFactories(ClassSE<T> factoryType, @Nullable ClassLoaderSE classLoader)
返されたファクトリは AnnotationAwareOrderComparator
でソートされます。
カスタムのインスタンス化戦略が必要な場合は、loadFactoryNames(java.lang.Class<?>, java.lang.ClassLoader)
を使用して、登録されているすべてのファクトリ名を取得します。
Spring Framework 5.3 の時点で、特定のファクトリ型に対して重複する実装クラス名が検出された場合、重複する実装型の 1 つのインスタンスのみがインスタンス化されます。
factoryType
- ファクトリを表すインターフェースまたは抽象クラス classLoader
- ロードに使用する ClassLoader (デフォルトを使用するために null
にすることができます)IllegalArgumentExceptionSE
- ファクトリ実装クラスをロードできない場合、またはファクトリのインスタンス化中にエラーが発生した場合 loadFactoryNames(java.lang.Class<?>, java.lang.ClassLoader)
public static ListSE<StringSE> loadFactoryNames(ClassSE<?> factoryType, @Nullable ClassLoaderSE classLoader)
Spring Framework 5.3 の時点で、特定の実装クラス名が特定のファクトリ型に対して複数回検出された場合、重複は無視されます。
factoryType
- ファクトリを表すインターフェースまたは抽象クラス classLoader
- リソースのロードに使用する ClassLoader。デフォルトを使用する null
にすることができます IllegalArgumentExceptionSE
- ファクトリ名のロード中にエラーが発生した場合 loadFactories(java.lang.Class<T>, java.lang.ClassLoader)