|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object | +--javax.imageio.spi.ServiceRegistry
サービスプロバイダインスタンスのレジストリです。
「サービス」とは、既知のインタフェースおよびクラス (通常は抽象クラス) のセットです。「サービスプロバイダ」とは、特定のサービスの実装です。プロバイダ内のクラスは通常、インタフェースを実装するか、またはサービス自体が定義されたクラスをサブクラス化します。
サービスプロバイダは 1 つまたは複数の「カテゴリ」に格納されます。各カテゴリは、そのすべてのメンバを実装する必要のあるクラスインタフェース (Class
オブジェクトにより記述される) で定義されます。カテゴリセットは動的に変更できます。
指定されたリーフクラス (つまり、任意の継承されたクラスやインタフェースではなく、getClass()
で返された実際のクラス) の 1 つのインスタンスのみが登録できます。ここで、com.mycompany.mypkg.GreenServiceProvider
クラスが com.mycompany.mypkg.MyService
インタフェースを実装すると仮定します。GreenServiceProvider
インタフェースを登録する場合、これは MyService
クラスにより定義されたカテゴリに格納されます。GreenServiceProvider
の新しいインスタンスを登録する場合、これは以前のインスタンスを置き替えます。通常、サービスプロバイダオブジェクトは単体であるため、この動作は適切です。
サービスプロバイダを宣言するために、services
サブディレクトリが各 JAR ファイルに存在する META-INF
ディレクトリ内に配置されます。このディレクトリには、JAR ファイルに 1 つまたは複数の実装クラスを保持する各サービスプロバイダインタフェースに対して 1 つのファイルが含まれます。たとえば、JAR ファイルに javax.someapi.SomeService
インタフェースを実装する com.mycompany.mypkg.MyServiceImpl
というクラスが含まれる場合、JAR には次の名前のファイルが含まれます。
META-INF/services/javax.someapi.SomeServiceまた、次の行が含まれます。
com.mycompany.mypkg.MyService
サービスプロバイダクラスは軽量で、迅速にロードする必要があります。これらのインタフェースの実装は、他のクラスやネイティブコードに複雑に依存しないようにする必要があります。複雑なサービスの場合の通常のパターンは、負荷の高いサービスに対して軽量なプロキシを登録するというものです。
適切な実行時アクセス権があれば、アプリケーションでレジストリの内容を必要に応じてカスタマイズできます。
サービスプロバイダ宣言の詳細および JAR 形式全般については、 「JAR File Specification」を参照してください。
RegisterableService
入れ子クラスの概要 | |
static interface |
ServiceRegistry.Filter
任意の基準に一致するプロバイダを選択するために ServiceRegistry.getServiceProviders で使用される単純なフィルタインタフェースです。 |
コンストラクタの概要 | |
ServiceRegistry(Iterator categories)
categories 引数から取り出したカテゴリセットを使用して ServiceRegistry インスタンスを構築します。 |
メソッドの概要 | |
boolean |
contains(Object provider)
provider が現在登録されている場合は true を返します。 |
void |
deregisterAll()
現在登録されているすべてのサービスプロバイダオブジェクトを、すべてのカテゴリから登録解除します。 |
void |
deregisterAll(Class category)
現在指定されたカテゴリに登録されているサービスプロバイダオブジェクトをすべて登録解除します。 |
void |
deregisterServiceProvider(Object provider)
サービスプロバイダオブジェクトを、それを含むすべてのカテゴリから削除します。 |
boolean |
deregisterServiceProvider(Object provider,
Class category)
指定されたカテゴリからサービスプロバイダオブジェクトを削除します。 |
void |
finalize()
ガベージコレクションの前にこのオブジェクトをファイナライズします。 |
Iterator |
getCategories()
現在のカテゴリセットを示す Class オブジェクトの Iterator を返します。 |
Object |
getServiceProviderByClass(Class providerClass)
現在登録されている、指定されたクラス型のプロバイダオブジェクトを返します。 |
Iterator |
getServiceProviders(Class category,
boolean useOrdering)
指定されたカテゴリ内の登録済みサービスプロバイダをすべて含む Iterator を返します。 |
Iterator |
getServiceProviders(Class category,
ServiceRegistry.Filter filter,
boolean useOrdering)
指定された ServiceRegistry.Filter オブジェクトの filter メソッドで設定された基準を満たす、指定されたカテゴリ内のサービスプロバイダオブジェクトを含む Iterator を返します。
|
static Iterator |
lookupProviders(Class providerClass)
コンテキストクラスローダを使用して、指定されたサービスの使用可能なプロバイダを検出して段階的にインスタンス化します。 |
static Iterator |
lookupProviders(Class providerClass,
ClassLoader loader)
指定されたクラスローダを使用して特定のサービスクラスの実装を検索します。 |
void |
registerServiceProvider(Object provider)
サービスプロバイダオブジェクトをレジストリに追加します。 |
boolean |
registerServiceProvider(Object provider,
Class category)
サービスプロバイダオブジェクトをレジストリに追加します。 |
void |
registerServiceProviders(Iterator providers)
Iterator から取り込んだ一連のサービスプロバイダオブジェクトをレジストリに追加します。 |
boolean |
setOrdering(Class category,
Object firstProvider,
Object secondProvider)
指定されたカテゴリ内の 2 つのサービスプロバイダオブジェクト間のペアの順序を設定します。 |
boolean |
unsetOrdering(Class category,
Object firstProvider,
Object secondProvider)
指定されたカテゴリの 2 つのサービスプロバイダオブジェクト間のペアの順序を設定します。 |
クラス java.lang.Object から継承したメソッド |
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
コンストラクタの詳細 |
public ServiceRegistry(Iterator categories)
categories
引数から取り出したカテゴリセットを使用して ServiceRegistry
インスタンスを構築します。
categories
- カテゴリの定義に使用する Class
オブジェクトを含む Iterator
IllegalArgumentException
- categories
が null
の場合メソッドの詳細 |
public static Iterator lookupProviders(Class providerClass, ClassLoader loader)
このメソッドは、指定されたサービスクラスの名前を、クラスコメントの記述に従ってプロバイダ構成のファイル名に変換し、指定されたクラスローダの getResources
メソッドを使用してその名前を持つ使用可能なファイルすべてを検索します。これらのファイルは次に読み込まれて構文解析され、プロバイダクラス名のリストが作成されます。返された反復子は指定されたクラスローダを使用して、リストの各要素を参照しインスタンス化します。
実行中の Java 仮想マシンに拡張機能をインストールすることが可能であるため、このメソッドは呼び出されるたびに異なる結果を返す場合があります。
providerClass
- 検出中のサービスプロバイダのクラスまたはインタフェースを示す Class
オブジェクトloader
- プロバイダ構成ファイルのロードおよびプロバイダクラスのインスタンス化に使用するクラスローダ。システムクラスローダを使用する場合、またはブートストラップクラスローダで失敗した場合は null
Iterator
。プロバイダ構成ファイルが指定された形式に違反するか、またはプロバイダクラスを検出してインスタンス化できない場合、反復子により Error
がスローされます。
IllegalArgumentException
- providerClass
が null
の場合public static Iterator lookupProviders(Class providerClass)
ClassLoader cl = Thread.currentThread().getContextClassLoader(); return Service.providers(service, cl);
providerClass
- 検出中のサービスプロバイダのクラスまたはインタフェースを示す Class
オブジェクト
Iterator
。プロバイダ構成のファイルが指定された形式に違反するか、またはプロバイダクラスを検出してインスタンス化できない場合、反復子により Error
がスローされます。
IllegalArgumentException
- providerClass
が null
の場合public Iterator getCategories()
Class
オブジェクトの Iterator
を返します。カテゴリが存在しない場合、反復子は空です。
Class
オブジェクトを含む Iterator
public boolean registerServiceProvider(Object provider, Class category)
provider
が RegisterableService
インタフェースを実装する場合、onRegistration
メソッドが呼び出されます。その onDeregistration
メソッドは、カテゴリの削除やレジストリのガベージコレクトなど、カテゴリから登録解除されるたびに呼び出されます。
provider
- 登録されるサービスプロバイダオブジェクトcategory
- プロバイダが登録されるカテゴリ
IllegalArgumentException
- provider
が null
の場合
IllegalArgumentException
- category
に対応するカテゴリが存在しない場合
ClassCastException
- プロバイダが category
で定義された Class
を実装しない場合public void registerServiceProvider(Object provider)
Class
を実装するレジストリに存在する各カテゴリ内で関連付けされます。
provider
が RegisterableService
インタフェースを実装する場合、onRegistration
メソッドが登録されるカテゴリごとに一度呼び出されます。その onDeregistration
メソッドは、カテゴリから登録解除されるたび、またはレジストリがファイナライズされる際に呼び出されます。
provider
- 登録されるサービスプロバイダオブジェクト
IllegalArgumentException
- provider
が null
の場合public void registerServiceProviders(Iterator providers)
Iterator
から取り込んだ一連のサービスプロバイダオブジェクトをレジストリに追加します。各プロバイダは、Class
を実装するレジストリに存在する各カテゴリ内で関連付けされます。
RegisterableService インタフェースを実装する provider
の各エントリの場合、onRegistration
メソッドが登録されるカテゴリごとに一度呼び出されます。その onDeregistration
メソッドは、カテゴリから登録解除されるたび、またはレジストリがファイナライズされる際に呼び出されます。
providers
- 登録されるサービスプロバイダオブジェクトを含む反復子
IllegalArgumentException
- providers
が null
であるか、null
エントリを含む場合public boolean deregisterServiceProvider(Object provider, Class category)
false
を返します。そうでない場合は、true
を返します。provider
と同じクラスのオブジェクトであっても provider
と等しくない (==
で比較) 場合、登録は解除されません。
provider
が RegisterableService
インスタンスを実装する場合、その onDeregistration
メソッドが呼び出されます。
provider
- 登録解除するサービスプロバイダオブジェクトcategory
- プロバイダが登録解除されるカテゴリ
true
、そうでない場合は false
IllegalArgumentException
- provider
が null
の場合
IllegalArgumentException
- category
に対応するカテゴリが存在しない場合
ClassCastException
- プロバイダが category
で定義されたクラスを実装しない場合public void deregisterServiceProvider(Object provider)
provider
- 登録解除されるサービスプロバイダオブジェクト
IllegalArgumentException
- provider
が null
の場合public boolean contains(Object provider)
provider
が現在登録されている場合は true
を返します。
provider
- 照会されるサービスプロバイダオブジェクト
true
IllegalArgumentException
- provider
が null
の場合public Iterator getServiceProviders(Class category, boolean useOrdering)
Iterator
を返します。useOrdering
が false
の場合、反復子はすべてのサービスプロバイダオブジェクトを任意の順序で返します。それ以外の場合、順番は設定されたペアの順序付けすべてを反映します。ペアの順序付けのグラフにサイクルが含まれる場合、サイクルに所属するプロバイダはどれも返されません。
category
- 取得元のカテゴリuseOrdering
- 返されるオブジェクトの順番にペアの順序付けを反映する場合は true
Iterator
(大抵はその順番通り)
IllegalArgumentException
- category
に対応するカテゴリが存在しない場合public Iterator getServiceProviders(Class category, ServiceRegistry.Filter filter, boolean useOrdering)
ServiceRegistry.Filter
オブジェクトの filter
メソッドで設定された基準を満たす、指定されたカテゴリ内のサービスプロバイダオブジェクトを含む Iterator
を返します。
useOrdering
引数により、getServiceProviders(Class, boolean)
と同じ規則を使用して結果の順序付けが制御されます。
category
- 取得元のカテゴリfilter
- filter
メソッドが呼び出される ServiceRegistry.Filter
インスタンスuseOrdering
- 返されるオブジェクトの順番にペアの順序付けを反映する場合は true
Iterator
(大抵はその順番通り)
IllegalArgumentException
- category
に対応するカテゴリが存在しない場合public Object getServiceProviderByClass(Class providerClass)
null
を返します。
providerClass
- 目的とするサービスプロバイダオブジェクトの Class
Class
型のサービスプロバイダオブジェクト。存在しない場合は null
IllegalArgumentException
- providerClass
が null
の場合public boolean setOrdering(Class category, Object firstProvider, Object secondProvider)
false
を返します。プロバイダが以前に逆方向に順序付けされた場合、その順序は削除されます。
順序は getServiceProviders
メソッドにより、その useOrdering
引数が true
の場合に使用されます。
category
- 優先度を設定するカテゴリを示す Class
オブジェクトfirstProvider
- 優先されるプロバイダsecondProvider
- firstProvider
が優先されるプロバイダ
true
IllegalArgumentException
- プロバイダが null
か、または同じオブジェクトの場合
IllegalArgumentException
- category
に対応するカテゴリがない場合public boolean unsetOrdering(Class category, Object firstProvider, Object secondProvider)
false
を返します。
順序は、useOrdering
引数が true
の場合に、getServiceProviders
メソッドにより使用されます。
category
- 優先度の設定が解除されるカテゴリを示す Class
オブジェクトfirstProvider
- 以前の優先プロバイダsecondProvider
- firstProvider
が以前優先されていたプロバイダ
true
IllegalArgumentException
- プロバイダが null
か、または同じオブジェクトの場合
IllegalArgumentException
- category
に対応するカテゴリが存在しない場合public void deregisterAll(Class category)
category
- 空にするカテゴリ
IllegalArgumentException
- category
に対応するカテゴリが存在しない場合public void deregisterAll()
public void finalize() throws Throwable
deregisterAll
メソッドを呼び出して、現在登録されているサービスプロバイダをすべて登録解除します。このメソッドを、アプリケーションコードから呼び出してはなりません。
Object
内の finalize
Throwable
- スーパークラスのファイナライズ時にエラーが発生した場合
|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.