クラス SpringFactoriesLoader

java.lang.ObjectSE
org.springframework.core.io.support.SpringFactoriesLoader
既知の直属サブクラス
MockSpringFactoriesLoader

public class SpringFactoriesLoader extends ObjectSE
フレームワーク内での内部使用のための汎用ファクトリローディングメカニズム。

SpringFactoriesLoader は、クラスパスの複数の JAR ファイルに存在する可能性のある "META-INF/spring.factories" ファイルから、指定された型のファクトリをロードしてインスタンス化します。spring.factories ファイルは PropertiesSE 形式である必要があります。ここで、キーはインターフェースまたは抽象クラスの完全修飾名であり、値は実装クラス名のコンマ区切りのリストです。例:

example.MyService=example.MyServiceImpl1,example.MyServiceImpl2
ここで、example.MyService はインターフェースの名前であり、MyServiceImpl1 と MyServiceImpl2 は 2 つの実装です。

実装クラスには、インスタンスの作成に使用される単一の解決可能なコンストラクターが必要です。

  • プライマリまたは単一のコンストラクター
  • 単一のパブリックコンストラクター
  • デフォルトのコンストラクター

解決可能なコンストラクターに引数がある場合は、適切な ArgumentResolver を指定する必要があります。インスタンス化の失敗の処理方法をカスタマイズするには、FailureHandler を提供することを検討してください。

導入:
3.2
作成者:
Arjen Poutsma, Juergen Hoeller, Sam Brannen, Andy Wilkinson, Madhura Bhave, Phillip Webb
  • フィールドの詳細

    • FACTORIES_RESOURCE_LOCATION

      public static final StringSE FACTORIES_RESOURCE_LOCATION
      ファクトリを探す場所です。

      複数の JAR ファイルに存在できます。

      関連事項:
  • コンストラクターの詳細

    • SpringFactoriesLoader

      protected SpringFactoriesLoader(@Nullable ClassLoaderSE classLoader, MapSE<StringSE,ListSE<StringSE>> factories)
      新しい SpringFactoriesLoader インスタンスを作成します。
      パラメーター:
      classLoader - ファクトリのインスタンス化に使用されるクラスローダー
      factories - ファクトリクラス名から実装クラス名へのマップ
      導入:
      6.0
  • メソッドの詳細

    • load

      public <T> ListSE<T> load(ClassSE<T> factoryType)
      構成されたクラスローダーと、引数なしのコンストラクターを予期するデフォルトの引数リゾルバーを使用して、指定された型のファクトリ実装を "META-INF/spring.factories" からロードしてインスタンス化します。

      返されたファクトリは AnnotationAwareOrderComparator でソートされます。

      カスタムのインスタンス化戦略が必要な場合は、カスタム ArgumentResolver および / または FailureHandler で load(...) を使用します。

      Spring Framework 5.3 の時点で、特定のファクトリ型に対して重複する実装クラス名が検出された場合、重複する実装型の 1 つのインスタンスのみがインスタンス化されます。

      パラメーター:
      factoryType - ファクトリを表すインターフェースまたは抽象クラス
      例外:
      IllegalArgumentExceptionSE - ファクトリ実装クラスをロードできない場合、またはファクトリのインスタンス化中にエラーが発生した場合
      導入:
      6.0
    • load

      public <T> ListSE<T> load(ClassSE<T> factoryType, @Nullable SpringFactoriesLoader.ArgumentResolver argumentResolver)
      構成されたクラスローダーと指定された引数リゾルバーを使用して、 "META-INF/spring.factories" から指定された型のファクトリ実装をロードしてインスタンス化します。

      返されたファクトリは AnnotationAwareOrderComparator でソートされます。

      Spring Framework 5.3 の時点で、特定のファクトリ型に対して重複する実装クラス名が検出された場合、重複する実装型の 1 つのインスタンスのみがインスタンス化されます。

      パラメーター:
      factoryType - ファクトリを表すインターフェースまたは抽象クラス
      argumentResolver - コンストラクター引数をその型で解決するために使用される戦略
      例外:
      IllegalArgumentExceptionSE - ファクトリ実装クラスをロードできない場合、またはファクトリのインスタンス化中にエラーが発生した場合
      導入:
      6.0
    • load

      public <T> ListSE<T> load(ClassSE<T> factoryType, @Nullable SpringFactoriesLoader.FailureHandler failureHandler)
      指定されたエラーハンドラーによって提供されるカスタムエラー処理で構成されたクラスローダーを使用して、 "META-INF/spring.factories" から指定された型のファクトリ実装を読み込んでインスタンス化します。

      返されたファクトリは AnnotationAwareOrderComparator でソートされます。

      Spring Framework 5.3 の時点で、特定のファクトリ型に対して重複する実装クラス名が検出された場合、重複する実装型の 1 つのインスタンスのみがインスタンス化されます。

      ロードできないファクトリ実装クラス、またはインスタンス化中にエラーが発生した場合、指定された失敗ハンドラーが呼び出されます。

      パラメーター:
      factoryType - ファクトリを表すインターフェースまたは抽象クラス
      failureHandler - ファクトリのインスタンス化の失敗を処理するために使用される戦略
      導入:
      6.0
    • load

      public <T> ListSE<T> load(ClassSE<T> factoryType, @Nullable SpringFactoriesLoader.ArgumentResolver argumentResolver, @Nullable SpringFactoriesLoader.FailureHandler failureHandler)
      構成されたクラスローダー、指定された引数リゾルバー、指定された障害ハンドラーによって提供されるカスタム障害処理を使用して、指定された型のファクトリ実装を "META-INF/spring.factories" からロードしてインスタンス化します。

      返されたファクトリは AnnotationAwareOrderComparator でソートされます。

      Spring Framework 5.3 の時点で、特定のファクトリ型に対して重複する実装クラス名が検出された場合、重複する実装型の 1 つのインスタンスのみがインスタンス化されます。

      ロードできないファクトリ実装クラス、またはインスタンス化中にエラーが発生した場合、指定された失敗ハンドラーが呼び出されます。

      パラメーター:
      factoryType - ファクトリを表すインターフェースまたは抽象クラス
      argumentResolver - コンストラクター引数をその型で解決するために使用される戦略
      failureHandler - ファクトリのインスタンス化の失敗を処理するために使用される戦略
      導入:
      6.0
    • instantiateFactory

      @Nullable protected <T> T instantiateFactory(StringSE implementationName, ClassSE<T> type, @Nullable SpringFactoriesLoader.ArgumentResolver argumentResolver, SpringFactoriesLoader.FailureHandler failureHandler)
    • loadFactories

      public static <T> ListSE<T> loadFactories(ClassSE<T> factoryType, @Nullable ClassLoaderSE classLoader)
      指定されたクラスローダーを使用して、指定された型のファクトリ実装を "META-INF/spring.factories" からロードしてインスタンス化します。

      返されたファクトリは AnnotationAwareOrderComparator でソートされます。

      Spring Framework 5.3 の時点で、特定のファクトリ型に対して重複する実装クラス名が検出された場合、重複する実装型の 1 つのインスタンスのみがインスタンス化されます。

      SpringFactoriesLoader.ArgumentResolver または SpringFactoriesLoader.FailureHandler をサポートするより高度なファクトリロードについては、forDefaultResourceLocation(ClassLoader) を使用して SpringFactoriesLoader インスタンスを取得します。

      パラメーター:
      factoryType - ファクトリを表すインターフェースまたは抽象クラス
      classLoader - ロードに使用する ClassLoader (デフォルトを使用するために null にすることができます)
      例外:
      IllegalArgumentExceptionSE - ファクトリ実装クラスをロードできない場合、またはファクトリのインスタンス化中にエラーが発生した場合
    • loadFactoryNames

      @DeprecatedSE(since="6.0") public static ListSE<StringSE> loadFactoryNames(ClassSE<?> factoryType, @Nullable ClassLoaderSE classLoader)
      使用すべきではありません。
      指定されたクラスローダーを使用して、指定された型のファクトリ実装の完全修飾クラス名を "META-INF/spring.factories" からロードします。

      Spring Framework 5.3 の時点で、特定の実装クラス名が特定のファクトリ型に対して複数回検出された場合、重複は無視されます。

      パラメーター:
      factoryType - ファクトリを表すインターフェースまたは抽象クラス
      classLoader - リソースのロードに使用する ClassLoader。デフォルトを使用する null にすることができます
      例外:
      IllegalArgumentExceptionSE - ファクトリ名のロード中にエラーが発生した場合
      関連事項:
    • forDefaultResourceLocation

      public static SpringFactoriesLoader forDefaultResourceLocation()
      デフォルトのクラスローダーを使用して、 "META-INF/spring.factories" からファクトリ実装をロードしてインスタンス化する SpringFactoriesLoader インスタンスを作成します。
      戻り値:
      SpringFactoriesLoader インスタンス
      導入:
      6.0
      関連事項:
    • forDefaultResourceLocation

      public static SpringFactoriesLoader forDefaultResourceLocation(@Nullable ClassLoaderSE classLoader)
      指定されたクラスローダーを使用して、 "META-INF/spring.factories" からファクトリ実装をロードしてインスタンス化する SpringFactoriesLoader インスタンスを作成します。
      パラメーター:
      classLoader - リソースのロードに使用する ClassLoader。デフォルトを使用する null にすることができます
      戻り値:
      SpringFactoriesLoader インスタンス
      導入:
      6.0
      関連事項:
    • forResourceLocation

      public static SpringFactoriesLoader forResourceLocation(StringSE resourceLocation)
      デフォルトのクラスローダーを使用して、指定された場所からファクトリ実装をロードしてインスタンス化する SpringFactoriesLoader インスタンスを作成します。
      パラメーター:
      resourceLocation - ファクトリを探すリソースの場所
      戻り値:
      SpringFactoriesLoader インスタンス
      導入:
      6.0
      関連事項:
    • forResourceLocation

      public static SpringFactoriesLoader forResourceLocation(StringSE resourceLocation, @Nullable ClassLoaderSE classLoader)
      指定されたクラスローダーを使用して、指定された場所からファクトリ実装をロードしてインスタンス化する SpringFactoriesLoader インスタンスを作成します。
      パラメーター:
      resourceLocation - ファクトリを探すリソースの場所
      classLoader - リソースのロードに使用する ClassLoader。デフォルトを使用する null にすることができます
      戻り値:
      SpringFactoriesLoader インスタンス
      導入:
      6.0
      関連事項:
    • loadFactoriesResource

      protected static MapSE<StringSE,ListSE<StringSE>> loadFactoriesResource(ClassLoaderSE classLoader, StringSE resourceLocation)