モジュール java.desktop
パッケージ javax.imageio.spi

クラスServiceRegistry

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のドキュメントを参照してください。

関連項目:
  • ネストされたクラスのサマリー

    ネストされたクラス
    修飾子と型
    クラス
    説明
    static interface 
    任意の基準に一致するプロバイダを選択するためにServiceRegistry.getServiceProvidersで使用される単純なフィルタ・インタフェースです。
  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ
    説明
    ServiceRegistry(Iterator<Class<?>> categories)
    categories引数から取り出したカテゴリ・セットを使用してServiceRegistryインスタンスを構築します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    boolean
    contains(Object provider)
    providerが現在登録されている場合、trueを返します。
    void
    現在登録されているすべてのサービス・プロバイダ・オブジェクトを、すべてのカテゴリから登録解除します。
    void
    deregisterAll(Class<?> category)
    現在指定されたカテゴリに登録されているサービス・プロバイダ・オブジェクトをすべて登録解除します。
    void
    サービス・プロバイダ・オブジェクトを、それを含むすべてのカテゴリから削除します。
    <T> boolean
    deregisterServiceProvider(T provider, Class<T> category)
    指定されたカテゴリからサービス・プロバイダ・オブジェクトを削除します。
    void
    非推奨。
    finalizeメソッドは非推奨になっています。
    現在のカテゴリ・セットを示す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
    サービス・プロバイダ・オブジェクトをレジストリに追加します。
    <T> boolean
    registerServiceProvider(T provider, Class<T> category)
    サービス・プロバイダ・オブジェクトをレジストリに追加します。
    void
    Iteratorから取り込んだ一連のサービス・プロバイダ・オブジェクトをレジストリに追加します。
    <T> boolean
    setOrdering(Class<T> category, T firstProvider, T secondProvider)
    指定されたカテゴリの2つのサービス・プロバイダ・オブジェクト間のペアの順序を設定します。
    <T> boolean
    unsetOrdering(Class<T> category, T firstProvider, T secondProvider)
    指定されたカテゴリの2つのサービス・プロバイダ・オブジェクト間のペアの順序を設定します。

    クラス java.lang.Objectで宣言されたメソッド

    clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • コンストラクタの詳細

    • ServiceRegistry

      public ServiceRegistry(Iterator<Class<?>> categories)
      categories引数から取り出したカテゴリ・セットを使用してServiceRegistryインスタンスを構築します。 カテゴリはすべて、クラス仕様にリストされている一連のサービス型のメンバーでなければなりません。
      パラメータ:
      categories - カテゴリの定義に使用するClassオブジェクトを含むIterator
      例外:
      IllegalArgumentException - categoriesnullの場合、またはカテゴリの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 - providerClassnullの場合、または許可されているサービス型の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 - providerClassnullの場合、または許可されているサービス型の1つでない場合。
    • getCategories

      public Iterator<Class<?>> getCategories()
      現在のカテゴリ・セットを示すClassオブジェクトのIteratorを返します。 カテゴリが存在しない場合、イテレータは空です。
      戻り値:
      Class オブジェクトを含むIterator
    • registerServiceProvider

      public <T> boolean registerServiceProvider(T provider, Class<T> category)
      サービス・プロバイダ・オブジェクトをレジストリに追加します。 プロバイダは指定されたカテゴリに関連付けされます。

      providerRegisterableServiceインタフェースを実装する場合は、そのonRegistrationメソッドが呼び出されます。 そのonDeregistrationメソッドは、カテゴリの削除やレジストリのガベージ・コレクトなど、カテゴリから登録解除されるたびに呼び出されます。

      型パラメータ:
      T - プロバイダの型。
      パラメータ:
      provider - 登録されるサービス・プロバイダ・オブジェクト。
      category - プロバイダが登録されるカテゴリ。
      戻り値:
      以前に同じカテゴリに同じクラスのプロバイダが登録されていなかった場合はtrue
      例外:
      IllegalArgumentException - providernullの場合。
      IllegalArgumentException - categoryに対応するカテゴリが存在しない場合。
      ClassCastException - プロバイダがcategoryで定義されたClassを実装しない場合。
    • registerServiceProvider

      public void registerServiceProvider(Object provider)
      サービス・プロバイダ・オブジェクトをレジストリに追加します。 プロバイダは、Classを実装するレジストリに存在する各カテゴリ内で関連付けされます。

      providerRegisterableServiceインタフェースを実装する場合、onRegistrationメソッドが登録されるカテゴリごとに一度呼び出されます。 そのonDeregistrationメソッドは、カテゴリから登録解除されるたび、またはレジストリがファイナライズされる際に呼び出されます。

      パラメータ:
      provider - 登録されるサービス・プロバイダ・オブジェクト。
      例外:
      IllegalArgumentException - providernullの場合。
    • registerServiceProviders

      public void registerServiceProviders(Iterator<?> providers)
      Iteratorから取り込んだ一連のサービス・プロバイダ・オブジェクトをレジストリに追加します。 各プロバイダは、Classを実装するレジストリに存在する各カテゴリ内で関連付けされます。

      RegisterableServiceインタフェースを実装するprovidersの各エントリの場合、onRegistrationメソッドが登録されるカテゴリごとに一度呼び出されます。 そのonDeregistrationメソッドは、カテゴリから登録解除されるたび、またはレジストリがファイナライズされる際に呼び出されます。

      パラメータ:
      providers - 登録されるサービス・プロバイダ・オブジェクトを含むイテレータ。
      例外:
      IllegalArgumentException - providersnullであるか、nullエントリを含む場合。
    • deregisterServiceProvider

      public <T> boolean deregisterServiceProvider(T provider, Class<T> category)
      指定されたカテゴリからサービス・プロバイダ・オブジェクトを削除します。 このプロバイダが以前に登録されていない場合は、何も実行せずにfalseを返します。 それ以外の場合はtrueが返されます。 providerと同じクラスのオブジェクトであってもproviderと等しくない(==で比較)場合、登録は解除されません。

      providerRegisterableServiceインタフェースを実装する場合は、そのonDeregistrationメソッドが呼び出されます。

      型パラメータ:
      T - プロバイダの型。
      パラメータ:
      provider - 登録解除されるサービス・プロバイダ・オブジェクト。
      category - プロバイダが登録解除されるカテゴリ。
      戻り値:
      プロバイダが以前に同じcategoryカテゴリに登録された場合はtrue、そうでない場合はfalse
      例外:
      IllegalArgumentException - providernullの場合。
      IllegalArgumentException - categoryに対応するカテゴリが存在しない場合。
      ClassCastException - プロバイダがcategoryで定義されたクラスを実装しない場合。
    • deregisterServiceProvider

      public void deregisterServiceProvider(Object provider)
      サービス・プロバイダ・オブジェクトを、それを含むすべてのカテゴリから削除します。
      パラメータ:
      provider - 登録解除されるサービス・プロバイダ・オブジェクト。
      例外:
      IllegalArgumentException - providernullの場合。
    • contains

      public boolean contains(Object provider)
      providerが現在登録されている場合、trueを返します。
      パラメータ:
      provider - 照会されるサービス・プロバイダ・オブジェクト。
      戻り値:
      指定されたプロバイダが登録済みの場合はtrue
      例外:
      IllegalArgumentException - providernullの場合。
    • getServiceProviders

      public <T> Iterator<T> getServiceProviders(Class<T> category, boolean useOrdering)
      指定されたカテゴリ内の登録済みサービス・プロバイダをすべて含むIteratorを返します。 useOrderingfalseの場合、イテレータはすべてのサービス・プロバイダ・オブジェクトを任意の順序で返します。 それ以外の場合、順番は設定されたペアの順序付けすべてを反映します。 ペアの順序付けのグラフにサイクルが含まれる場合、サイクルに所属するプロバイダはどれも返されません。
      型パラメータ:
      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 - providerClassnullの場合。
    • 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 - スーパー・クラスのファイナライズ時にエラーが発生した場合。
      関連項目: