サービスプロバイダフレームワークSPIを達成するためのシステムであり、システムはクライアントがデカップリングを達成するために実装するために使用できることができ、複数のサービスプロバイダモジュールシステムにおけるサービスの実装を提供することができます。
サービスプロバイダフレームワークは、3つの主要なコンポーネントがあります。
- サービスプロバイダ実装のためのサービス・インターフェース。
- 登録APIは、システムは、クライアントが使用できるように、サービス・インターフェースを実装登録するには、このAPIを使用しています。
- サービスアクセスAPIは、クライアントがサービスのインスタンスを取得することを選択できます。
JavaのSPI:
サービスプロバイダインタフェース(SPI)は、サードパーティの拡張機能を実装または拡張フレームと交換可能なモジュールを実装するために使用することができるAPIであってもよいです。
これらの手順を実行します。
- サービス実装クラスへの発信者はServiceLoader.loadを通じてサービスインターフェースのインスタンスをロードされ、
- サービスプロバイダは、サービス・インターフェースを実装した後、新たにMETA-INF自身ジャーパッケージ/ servicesディレクトリ内のファイル名のフルネームへのインタフェース、および実装クラスの完全な名前が書かれています。
春SPI
多くのオープンソース・ライブラリーは、直接的または間接的に同様の機構が、META-INF / spring.factoriesファイルによって代わりにMETA-INF /サービスディレクトリの代わりにJDK ServiceLoaderのSpringFactoriesLoaderによって、存在するようSPIにおけるばねとしてのJava SPIメカニズムを使用しています記述ファイルは、原則的には、Javaのリフレクション・メカニズムを使用することです。
春は唯一のSPIを提供し、一つだけのファイルは、META-INF / spring.factoriesです
スプリングSPIはより柔軟であり、キーが必要なインタフェースの実装クラス値、例えばスプリングブートが自動的に設定Beanを処理するために、この方法ではない:キーが注釈(例えばorg.springframework.boot.autoconfig.EnableAutoConfiguration)であり、値であります@Configurationラベルのクラス。
また、コンバータSPI春とフォーマッタSPIがあります。
コンバータは、フォーマッタSPIは文字列と他のタイプの間で変換するために使用される、任意の二つのタイプの間で変換するために使用することができます。
サービスインタフェースとしてコンバータおよびフォーマッタインターフェイス
ConersionServiceものアクセスを提供しながら、達成するための登録サービスを提供し、ConverterRegistryインターフェイスを実現しました。
そして、FormattingConversionService
その後、実現FormatterRegistryインタフェースは、登録実装クラスを可能にし、フォーマッタを呼び出します。一方FormattingConversionServiceもConversionServiceインターフェイスを実現しました。