|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
javax.imageio.spi
类 ServiceRegistry
java.lang.Object javax.imageio.spi.ServiceRegistry
- 直接已知子类:
- IIORegistry
-
public class ServiceRegistry
- extends Object
用于服务提供程序实例的注册表。
服务 是一组熟知的接口和类(通常为抽象类)。服务提供程序 是服务的具体实现。提供程序中的类通常实现由服务自身定义的类的接口或子类。
服务提供程序存储在一个或多个类别 中,每个类别都由所有成员都必须实现的(由一个 Class
对象描述)一个接口的类定义。类别集可动态更改。
只能注册给定叶类的单一实例(即,由 getClass()
返回的实际类,相对于继承的类或接口而言)。即,假定 com.mycompany.mypkg.GreenServiceProvider
类实现 com.mycompany.mypkg.MyService
接口。如果注册了 GreenServiceProvider
实例,则其将存储在由 MyService
类定义的类别中。如果注册了 GreenServiceProvider
的新实例,它将替换以前的实例。在实践中,服务提供程序对象通常只有一个,所有此行为是适当的。
为声明服务提供程序,在每个 JAR 文件都有的 META-INF
目录中加入一个 services
子目录。此目录针对每个在 JAR 文件中具有一个或多个实现类的服务提供程序接口都包含一个文件。例如,假设 JAR 文件包含了一个名称为 com.mycompany.mypkg.MyServiceImpl
的类,它实现 javax.someapi.SomeService
接口,则此 JAR 将包含一个名称如下所示的文件:
META-INF/services/javax.someapi.SomeService包含行:
com.mycompany.mypkg.MyService
服务提供程序类应为轻量级的,可快速加载。这些接口的实现应避免复杂化其他类和本地代码的依赖性。更复杂的服务的常用模式是为重量级服务注册一个轻量级的代理。
只要具有适当的运行时权限,应用程序即可根据需要自定义注册表的内容。
有关声明服务提供程序和通用 JAR 格式的更详细的信息,请参见 JAR File Specification。
- 另请参见:
-
RegisterableService
嵌套类摘要 | |
---|---|
static interface |
ServiceRegistry.Filter ServiceRegistry.getServiceProviders 使用的一个简单过滤器接口,用来选择与任意条件匹配的提供程序。 |
构造方法摘要 | |
---|---|
ServiceRegistry(Iterator<Class<?>> categories) 使用取自 categories 参数的一组类别构造 ServiceRegistry 实例。 |
方法摘要 | ||
---|---|---|
boolean |
contains(Object provider) 如果当前注册了 provider ,则返回 true 。 |
|
void |
deregisterAll() 从所有类别注销所有当前注册的服务提供程序。 |
|
void |
deregisterAll(Class<?> category) 注销给定类别下当前注册的所有服务提供程序对象。 |
|
void |
deregisterServiceProvider(Object provider) 从包含它的所有类别中移除服务提供程序对象。 |
|
|
deregisterServiceProvider(T provider, Class<T> category) 从给定的类别中移除服务提供程序对象。 |
|
void |
finalize() 在垃圾回收前终止此对象。 |
|
Iterator<Class<?>> |
getCategories() 返回指示当前类别集的 Class 对象的 Iterator 。 |
|
|
getServiceProviderByClass(Class<T> providerClass) 返回当前注册的属于给定类类型的服务提供程序对象。 |
|
|
getServiceProviders(Class<T> category, boolean useOrdering) 返回一个包含给定类别中的所有已注册的服务提供程序的 Iterator 。 |
|
|
getServiceProviders(Class<T> category, ServiceRegistry.Filter filter, boolean useOrdering) 返回一个 Iterator ,其包含给定类别中满足由指定的 ServiceRegistry.Filter 对象的 filter 方法定义的条件的服务提供程序对象。 |
|
static
|
lookupProviders(Class<T> providerClass) 使用上下文类加载器定位和递增地实例化给定服务的可用的提供程序。 |
|
static
|
lookupProviders(Class<T> providerClass, ClassLoader loader) 使用给定的类加载器搜索特定服务类的实现。 |
|
void |
registerServiceProvider(Object provider) 将一个服务提供程序对象添加到注册表。 |
|
|
registerServiceProvider(T provider, Class<T> category) 将一个服务提供程序对象添加到注册表。 |
|
void |
registerServiceProviders(Iterator<?> providers) 将一组取自 Iterator 的服务提供程序对象添加到注册表。 |
|
|
setOrdering(Class<T> category, T firstProvider, T secondProvider) 为给定类别中的两个服务提供程序对象设置配对排序。 |
|
|
unsetOrdering(Class<T> category, T firstProvider, T secondProvider) 为给定类别中的两个服务提供程序对象设置配对排序。 |
从类 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
- 如果categories
为null
。
方法详细信息 |
---|
lookupProviders
public static <T> Iterator<T> lookupProviders(Class<T> providerClass, ClassLoader loader)
-
使用给定的类加载器搜索特定服务类的实现。
此方法根据类注释的描述将给定服务类的名称转换为一个提供程序配置文件名,然后使用给定类加载器的
getResources
方法查找所有可用的具有此名称的文件。然后读取并分析这些文件以生成一个提供程序类名称列表。返回的迭代器使用给定的类加载器查找并实例化列表中的每个元素。由于能将扩展安装到一个运行的 Java 虚拟机中,此方法在每次调用时可能返回不同的结果。
-
- 参数:
-
providerClass
- 指示所检测的服务提供程序的类或接口的Class
对象。 -
loader
- 将用于加载提供程序配置文件和实例化提供程序类的类加载器,如果将使用系统类加载器(或,系统类加载器失败时使用引导类加载器),则为null
。 - 返回:
-
以任意顺序生成给定服务的提供程序对象的
Iterator
。如果提供程序配置文件违反指定的格式,或者无法找到和实例化提供程序类,则迭代器将抛出一个Error
。 - 抛出:
-
IllegalArgumentException
- 如果providerClass
为null
。
lookupProviders
public static <T> Iterator<T> lookupProviders(Class<T> providerClass)
-
使用上下文类加载器定位和递增地实例化给定服务的可用的提供程序。此便捷方法等效于:
ClassLoader cl = Thread.currentThread().getContextClassLoader(); return Service.providers(service, cl);
-
- 参数:
-
providerClass
- 指示所检测的服务提供程序的类或接口的Class
对象。 - 返回:
-
以任意顺序生成给定服务的提供程序对象的
Iterator
。如果提供程序配置文件违反指定的格式,或者无法找到和实例化提供程序类,则迭代器将抛出一个Error
。 - 抛出:
-
IllegalArgumentException
- 如果providerClass
为null
。
getCategories
public Iterator<Class<?>> getCategories()
-
返回指示当前类别集的
Class
对象的Iterator
。如果不存在任何类别,则此迭代器将为空。 -
- 返回:
-
包含
Class
对象的Iterator
。
registerServiceProvider
public <T> boolean registerServiceProvider(T provider, Class<T> category)
-
将一个服务提供程序对象添加到注册表。此提供程序与给定的类别关联。
如果
provider
实现了RegisterableService
接口,则将调用其onRegistration
方法。每次将提供程序从某个类别注销时都将调用其onDeregistration
方法,例如,移除类别或垃圾回收注册表时都要调用该方法。 -
- 参数:
-
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
方法。 -
- 参数:
-
provider
- 要注销的服务提供程序对象。 -
category
- 要从其注销提供程序的类别。 - 返回:
-
如果提供程序以前已注册在相同的类别中,则返回
true
,否则返回false
。 - 抛出:
-
IllegalArgumentException
- 如果provider
为null
。 -
IllegalArgumentException
- 如果没有与category
对应的类别。 -
ClassCastException
- 如果提供程序未实现由category
定义的类。