- java.lang.Object
-
- javax.imageio.spi.ServiceRegistry
-
- 直系の既知のサブクラス:
IIORegistry
public class ServiceRegistry extends Object
Image I/Oサービス・タイプのサービス・プロバイダ・インスタンス用のレジストリ。サービス・プロバイダは、1つ以上のcategoriesに格納されています。それぞれのメンバーは、すべてのメンバーが実装する必要があるクラスまたはインタフェース(
Class
オブジェクトによって記述される)によって定義されています。このクラスでサポートされている一連のカテゴリは、次の標準のImage I/Oサービス・タイプに限定されています:
上記の型のサブ型ではないプロバイダをロードしようとすると、
IllegalArgumentException
が返されます。サービス・プロバイダをロードする一般的なメカニズムについては、このクラスで使用される基本的な標準メカニズムである
ServiceLoader
を参照してください。指定されたリーフ・クラス(つまり、任意の継承されたクラスやインタフェースではなく、
getClass()
で返された実際のクラス)の1つのインスタンスのみが登録できます。 つまり、com.mycompany.mypkg.GreenImageReaderProvider
クラスがjavax.imageio.spi.ImageReaderSpi
のサブクラスであるとします。GreenImageReaderProvider
インスタンスが登録されている場合は、ImageReaderSpi
クラスで定義されたカテゴリに格納されます。GreenImageReaderProvider
の新しいインスタンスが登録されている場合、以前のインスタンスが置き換えられます。 通常、サービス・プロバイダ・オブジェクトは単体であるため、この動作は適切です。サービス・プロバイダのクラスは軽量で、読み込みが迅速でなければなりません。 これらのインタフェースの実装は、ほかのクラスやネイティブ・コードに複雑に依存しないようにする必要があります。 複雑なサービスの場合の通常のパターンは、負荷の高いサービスに対して軽量なプロキシを登録するというものです。
適切な実行時アクセス権があれば、アプリケーションでレジストリの内容を必要に応じてカスタマイズできます。
サービス・プロバイダの作成方法とデプロイ方法については、
ServiceLoader
のドキュメントを参照してください。- 関連項目:
RegisterableService
,ServiceLoader
-
-
ネストされたクラスのサマリー
ネストされたクラス 修飾子と型 クラス 説明 static interface
ServiceRegistry.Filter
任意の基準に一致するプロバイダを選択するためにServiceRegistry.getServiceProviders
で使用される単純なフィルタ・インタフェースです。
-
コンストラクタのサマリー
コンストラクタ コンストラクタ 説明 ServiceRegistry(Iterator<Class<?>> categories)
categories
引数から取り出したカテゴリ・セットを使用してServiceRegistry
インスタンスを構築します。
-
メソッドのサマリー
すべてのメソッド staticメソッド インスタンス・メソッド 具象メソッド 非推奨のメソッド 修飾子と型 メソッド 説明 boolean
contains(Object provider)
provider
が現在登録されている場合、true
を返します。void
deregisterAll()
現在登録されているすべてのサービス・プロバイダ・オブジェクトを、すべてのカテゴリから登録解除します。void
deregisterAll(Class<?> category)
現在指定されたカテゴリに登録されているサービス・プロバイダ・オブジェクトをすべて登録解除します。void
deregisterServiceProvider(Object provider)
サービス・プロバイダ・オブジェクトを、それを含むすべてのカテゴリから削除します。<T> boolean
deregisterServiceProvider(T provider, Class<T> category)
指定されたカテゴリからサービス・プロバイダ・オブジェクトを削除します。void
finalize()
非推奨。finalize
メソッドは推奨されていません。Iterator<Class<?>>
getCategories()
現在のカテゴリ・セットを示すClass
オブジェクトのIterator
を返します。<T> T
getServiceProviderByClass(Class<T> providerClass)
現在登録されている、指定されたクラス型のプロバイダ・オブジェクトを返します。<T> Iterator<T>
getServiceProviders(Class<T> category, boolean useOrdering)
指定されたカテゴリ内の登録済みサービス・プロバイダをすべて含むIterator
を返します。<T> Iterator<T>
getServiceProviders(Class<T> category, ServiceRegistry.Filter filter, boolean useOrdering)
指定されたServiceRegistry.Filter
オブジェクトのfilter
メソッドで設定された基準を満たす、指定されたカテゴリ内のサービス・プロバイダ・オブジェクトを含むIterator
を返します。static <T> Iterator<T>
lookupProviders(Class<T> providerClass)
コンテキスト・クラス・ローダーを使用して、指定されたサービスの使用可能なプロバイダを検出して段階的にインスタンス化します。static <T> Iterator<T>
lookupProviders(Class<T> providerClass, ClassLoader loader)
指定されたクラス・ローダーを使用して特定のサービス・クラスの実装を検索します。void
registerServiceProvider(Object provider)
サービス・プロバイダ・オブジェクトをレジストリに追加します。<T> boolean
registerServiceProvider(T provider, Class<T> category)
サービス・プロバイダ・オブジェクトをレジストリに追加します。void
registerServiceProviders(Iterator<?> providers)
Iterator
から取り込んだ一連のサービス・プロバイダ・オブジェクトをレジストリに追加します。<T> boolean
setOrdering(Class<T> category, T firstProvider, T secondProvider)
指定されたカテゴリの2つのサービス・プロバイダ・オブジェクト間のペアの順序を設定します。<T> boolean
unsetOrdering(Class<T> category, T firstProvider, T secondProvider)
指定されたカテゴリの2つのサービス・プロバイダ・オブジェクト間のペアの順序を設定します。
-
-
-
コンストラクタの詳細
-
ServiceRegistry
public ServiceRegistry(Iterator<Class<?>> categories)
categories
引数から取り出したカテゴリ・セットを使用してServiceRegistry
インスタンスを構築します。 カテゴリはすべて、クラス仕様にリストされている一連のサービス型のメンバーでなければなりません。- パラメータ:
categories
- カテゴリの定義に使用するClass
オブジェクトを含むIterator
。- 例外:
IllegalArgumentException
-categories
がnull
の場合、またはカテゴリの1つが許可されたサービス型でない場合。
-
-
メソッドの詳細
-
lookupProviders
public static <T> Iterator<T> lookupProviders(Class<T> providerClass, ClassLoader loader)
指定されたクラス・ローダーを使用して特定のサービス・クラスの実装を検索します。サービス・クラスは、クラス仕様にリストされているサービス型の1つでなければなりません。 そうでない場合は、
IllegalArgumentException
がスローされます。このメソッドは、指定されたサービス・クラスの名前を、クラス・コメントの記述に従ってプロバイダ構成のファイル名に変換し、指定されたクラス・ローダーの
getResources
メソッドを使用してその名前を持つ使用可能なファイルすべてを検索します。 これらのファイルは次に読み込まれて構文解析され、プロバイダ・クラス名のリストが作成されます。 返されたイテレータは指定されたクラス・ローダーを使用して、リストの各要素を参照しインスタンス化します。実行中のJava仮想マシンに拡張機能をインストールすることが可能であるため、このメソッドは呼び出されるたびに異なる結果を返す場合があります。
- 型パラメータ:
T
- providerClassの型。- パラメータ:
providerClass
- 検出中のサービス・プロバイダのクラスまたはインタフェースを示すClass
オブジェクト。loader
- プロバイダ構成ファイルのロードおよびプロバイダ・クラスのインスタンス化に使用するクラス・ローダー。システム・クラス・ローダーを使用する場合、またはブートストラップ・クラス・ローダーで失敗した場合はnull
。- 戻り値:
- 指定されたサービスのプロバイダ・オブジェクトを、任意の順番で生成する
Iterator
。 プロバイダ構成のファイルが指定された形式に違反するか、またはプロバイダ・クラスを検出してインスタンス化できない場合、イテレータによりError
がスローされる。 - 例外:
IllegalArgumentException
-providerClass
がnull
の場合、または許可されているサービス型の1つでない場合。
-
lookupProviders
public static <T> Iterator<T> lookupProviders(Class<T> providerClass)
コンテキスト・クラス・ローダーを使用して、指定されたサービスの使用可能なプロバイダを検出して段階的にインスタンス化します。 この便利なメソッドは、次の指定と同じです。ClassLoader cl = Thread.currentThread().getContextClassLoader(); return Service.providers(service, cl);
サービス・クラスは、クラス仕様にリストされているサービス型の1つでなければなりません。 そうでない場合は、
IllegalArgumentException
がスローされます。- 型パラメータ:
T
- providerClassの型。- パラメータ:
providerClass
- 検出中のサービス・プロバイダのクラスまたはインタフェースを示すClass
オブジェクト。- 戻り値:
- 指定されたサービスのプロバイダ・オブジェクトを、任意の順番で生成する
Iterator
。 プロバイダ構成のファイルが指定された形式に違反するか、またはプロバイダ・クラスを検出してインスタンス化できない場合、イテレータによりError
がスローされる。 - 例外:
IllegalArgumentException
-providerClass
がnull
の場合、または許可されているサービス型の1つでない場合。
-
getCategories
public Iterator<Class<?>> getCategories()
現在のカテゴリ・セットを示すClass
オブジェクトのIterator
を返します。 カテゴリが存在しない場合、イテレータは空です。- 戻り値:
Class
オブジェクトを含むIterator
。
-
registerServiceProvider
public <T> boolean registerServiceProvider(T provider, Class<T> category)
サービス・プロバイダ・オブジェクトをレジストリに追加します。 プロバイダは指定されたカテゴリに関連付けされます。provider
がRegisterableService
インタフェースを実装する場合は、そのonRegistration
メソッドが呼び出されます。 そのonDeregistration
メソッドは、カテゴリの削除やレジストリのガベージ・コレクトなど、カテゴリから登録解除されるたびに呼び出されます。- 型パラメータ:
T
- プロバイダの型。- パラメータ:
provider
- 登録されるサービス・プロバイダ・オブジェクト。category
- プロバイダが登録されるカテゴリ。- 戻り値:
- 以前に同じカテゴリに同じクラスのプロバイダが登録されていなかった場合はtrue
- 例外:
IllegalArgumentException
-provider
がnull
の場合。IllegalArgumentException
-category
に対応するカテゴリが存在しない場合。ClassCastException
- プロバイダがcategory
で定義されたClass
を実装しない場合。
-
registerServiceProvider
public void registerServiceProvider(Object provider)
サービス・プロバイダ・オブジェクトをレジストリに追加します。 プロバイダは、Class
を実装するレジストリに存在する各カテゴリ内で関連付けされます。provider
がRegisterableService
インタフェースを実装する場合、onRegistration
メソッドが登録されるカテゴリごとに一度呼び出されます。 そのonDeregistration
メソッドは、カテゴリから登録解除されるたび、またはレジストリがファイナライズされる際に呼び出されます。- パラメータ:
provider
- 登録されるサービス・プロバイダ・オブジェクト。- 例外:
IllegalArgumentException
-provider
がnull
の場合。
-
registerServiceProviders
public void registerServiceProviders(Iterator<?> providers)
Iterator
から取り込んだ一連のサービス・プロバイダ・オブジェクトをレジストリに追加します。 各プロバイダは、Class
を実装するレジストリに存在する各カテゴリ内で関連付けされます。RegisterableService
インタフェースを実装するproviders
の各エントリの場合、onRegistration
メソッドが登録されるカテゴリごとに一度呼び出されます。 そのonDeregistration
メソッドは、カテゴリから登録解除されるたび、またはレジストリがファイナライズされる際に呼び出されます。- パラメータ:
providers
- 登録されるサービス・プロバイダ・オブジェクトを含むイテレータ。- 例外:
IllegalArgumentException
-providers
がnull
であるか、null
エントリを含む場合。
-
deregisterServiceProvider
public <T> boolean deregisterServiceProvider(T provider, Class<T> category)
指定されたカテゴリからサービス・プロバイダ・オブジェクトを削除します。 このプロバイダが以前に登録されていない場合は、何も実行せずにfalse
を返します。 それ以外の場合はtrue
が返されます。provider
と同じクラスのオブジェクトであってもprovider
と等しくない(==
で比較)場合、登録は解除されません。provider
がRegisterableService
インタフェースを実装する場合は、そのonDeregistration
メソッドが呼び出されます。- 型パラメータ:
T
- プロバイダの型。- パラメータ:
provider
- 登録解除されるサービス・プロバイダ・オブジェクト。category
- プロバイダが登録解除されるカテゴリ。- 戻り値:
- プロバイダが以前に同じcategoryカテゴリに登録された場合は
true
、そうでない場合はfalse
。 - 例外:
IllegalArgumentException
-provider
がnull
の場合。IllegalArgumentException
-category
に対応するカテゴリが存在しない場合。ClassCastException
- プロバイダがcategory
で定義されたクラスを実装しない場合。
-
deregisterServiceProvider
public void deregisterServiceProvider(Object provider)
サービス・プロバイダ・オブジェクトを、それを含むすべてのカテゴリから削除します。- パラメータ:
provider
- 登録解除されるサービス・プロバイダ・オブジェクト。- 例外:
IllegalArgumentException
-provider
がnull
の場合。
-
contains
public boolean contains(Object provider)
provider
が現在登録されている場合、true
を返します。- パラメータ:
provider
- 照会されるサービス・プロバイダ・オブジェクト。- 戻り値:
- 指定されたプロバイダが登録済みの場合は
true
。 - 例外:
IllegalArgumentException
-provider
がnull
の場合。
-
getServiceProviders
public <T> Iterator<T> getServiceProviders(Class<T> category, boolean useOrdering)
指定されたカテゴリ内の登録済みサービス・プロバイダをすべて含むIterator
を返します。useOrdering
がfalse
の場合、イテレータはすべてのサービス・プロバイダ・オブジェクトを任意の順序で返します。 それ以外の場合、順番は設定されたペアの順序付けすべてを反映します。 ペアの順序付けのグラフにサイクルが含まれる場合、サイクルに所属するプロバイダはどれも返されません。- 型パラメータ:
T
- カテゴリの型。- パラメータ:
category
- 取得元のカテゴリ。useOrdering
- 返されるオブジェクトの順番にペアの順序付けを反映する場合はtrue
。- 戻り値:
- 指定されたカテゴリからのサービス・プロバイダ・オブジェクトを含む
Iterator
(大抵はその順序通り)。 - 例外:
IllegalArgumentException
-category
に対応するカテゴリが存在しない場合。
-
getServiceProviders
public <T> Iterator<T> getServiceProviders(Class<T> category, ServiceRegistry.Filter filter, boolean useOrdering)
指定されたServiceRegistry.Filter
オブジェクトのfilter
メソッドで設定された基準を満たす、指定されたカテゴリ内のサービス・プロバイダ・オブジェクトを含むIterator
を返します。useOrdering
引数により、getServiceProviders(Class, boolean)
と同じルールを使用して結果の順序付けが制御されます。- 型パラメータ:
T
- カテゴリの型。- パラメータ:
category
- 取得元のカテゴリ。filter
-filter
メソッドが呼び出されるServiceRegistry.Filter
インスタンス。useOrdering
- 返されるオブジェクトの順番にペアの順序付けを反映する場合はtrue
。- 戻り値:
- 指定されたカテゴリからのサービス・プロバイダ・オブジェクトを含む
Iterator
(大抵はその順序通り)。 - 例外:
IllegalArgumentException
-category
に対応するカテゴリが存在しない場合。
-
getServiceProviderByClass
public <T> T getServiceProviderByClass(Class<T> providerClass)
現在登録されている、指定されたクラス型のプロバイダ・オブジェクトを返します。 一度に登録できる特定クラスのオブジェクトは1つだけです。 登録されているオブジェクトが目的のクラス型でない場合は、null
を返します。- 型パラメータ:
T
- プロバイダの型。- パラメータ:
providerClass
- 目的とするサービス・プロバイダ・オブジェクトのClass
。- 戻り値:
- 現在登録されている、目的の
Class
型のサービス・プロバイダ・オブジェクト。存在しない場合はnull
。 - 例外:
IllegalArgumentException
-providerClass
がnull
の場合。
-
setOrdering
public <T> boolean setOrdering(Class<T> category, T firstProvider, T secondProvider)
指定されたカテゴリの2つのサービス・プロバイダ・オブジェクト間のペアの順序を設定します。 オブジェクトの内の1つまたは両方が、指定されたカテゴリ内に現在登録されていない場合、または目的の順序がすでに設定されている場合は、何も実行せずにfalse
を返します。 プロバイダが以前に逆方向に順序付けされた場合、その順序は削除されます。この順序は、
useOrdering
引数がtrue
の場合にgetServiceProviders
によって使用されます。- 型パラメータ:
T
- カテゴリの型。- パラメータ:
category
- 優先度を設定するカテゴリを示すClass
オブジェクト。firstProvider
- 優先されるプロバイダ。secondProvider
-firstProvider
が優先されるプロバイダ。- 戻り値:
- 以前に設定されなかった順序が設定された場合は
true
。 - 例外:
IllegalArgumentException
- プロバイダがnull
か、または同じオブジェクトの場合。IllegalArgumentException
-category
に対応するカテゴリが存在しない場合。
-
unsetOrdering
public <T> boolean unsetOrdering(Class<T> category, T firstProvider, T secondProvider)
指定されたカテゴリの2つのサービス・プロバイダ・オブジェクト間のペアの順序を設定します。 オブジェクトの1つまたは両方が指定されたカテゴリ内に現在登録されていない場合、またはその間の順序付けが現在設定されていない場合は、何も実行せずにfalse
を返します。この順序は、
useOrdering
引数がtrue
の場合にgetServiceProviders
によって使用されます。- 型パラメータ:
T
- カテゴリの型。- パラメータ:
category
- 優先度の設定が解除されるカテゴリを示すClass
オブジェクト。firstProvider
- 以前の優先プロバイダ。secondProvider
-firstProvider
が以前優先されていたプロバイダ。- 戻り値:
- 以前に設定された順序設定が解除された場合は
true
。 - 例外:
IllegalArgumentException
- プロバイダがnull
か、または同じオブジェクトの場合。IllegalArgumentException
-category
に対応するカテゴリが存在しない場合。
-
deregisterAll
public void deregisterAll(Class<?> category)
現在指定されたカテゴリに登録されているサービス・プロバイダ・オブジェクトをすべて登録解除します。- パラメータ:
category
- 空にするカテゴリ。- 例外:
IllegalArgumentException
-category
に対応するカテゴリが存在しない場合。
-
deregisterAll
public void deregisterAll()
現在登録されているすべてのサービス・プロバイダ・オブジェクトを、すべてのカテゴリから登録解除します。
-
finalize
@Deprecated(since="9") public void finalize() throws Throwable
非推奨。finalize
メソッドは推奨されていません。 クリーンアップを実行するためにfinalize
をオーバーライドするサブクラスは、代替クリーンアップ・メカニズムを使用し、オーバーライドするfinalize
メソッドを削除するように変更する必要があります。finalize
メソッドをオーバーライドする場合、実装では、super.finalize()
がObject.finalize()
の説明に従って呼び出されることを明示的に確認する必要があります。 移行オプションの詳細については、Object.finalize()
の仕様を参照してください。ガベージ・コレクションの前にこのオブジェクトをファイナライズします。deregisterAll
メソッドを呼び出して、現在登録されているサービス・プロバイダをすべて登録解除します。 このメソッドを、アプリケーション・コードから呼び出してはいけません。- オーバーライド:
finalize
、クラスObject
- 例外:
Throwable
- スーパー・クラスのファイナライズ時にエラーが発生した場合。- 関連項目:
WeakReference
,PhantomReference
-
-