所有类


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)
          从包含它的所有类别中移除服务提供程序对象。
<T> boolean
deregisterServiceProvider(T provider, Class<T> category)
          从给定的类别中移除服务提供程序对象。
 void 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)
          返回一个 Iterator,其包含给定类别中满足由指定的 ServiceRegistry.Filter 对象的 filter 方法定义的条件的服务提供程序对象。
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)
          为给定类别中的两个服务提供程序对象设置配对排序。
<T> boolean
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 - 如果 categoriesnull
方法详细信息

lookupProviders

public static <T> Iterator<T> lookupProviders(Class<T> providerClass,
                                              ClassLoader loader)
使用给定的类加载器搜索特定服务类的实现。

此方法根据类注释的描述将给定服务类的名称转换为一个提供程序配置文件名,然后使用给定类加载器的 getResources 方法查找所有可用的具有此名称的文件。然后读取并分析这些文件以生成一个提供程序类名称列表。返回的迭代器使用给定的类加载器查找并实例化列表中的每个元素。

由于能将扩展安装到一个运行的 Java 虚拟机中,此方法在每次调用时可能返回不同的结果。

参数:
providerClass - 指示所检测的服务提供程序的类或接口的 Class 对象。
loader - 将用于加载提供程序配置文件和实例化提供程序类的类加载器,如果将使用系统类加载器(或,系统类加载器失败时使用引导类加载器),则为 null
返回:
以任意顺序生成给定服务的提供程序对象的 Iterator。如果提供程序配置文件违反指定的格式,或者无法找到和实例化提供程序类,则迭代器将抛出一个 Error
抛出:
IllegalArgumentException - 如果 providerClassnull

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 - 如果 providerClassnull

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 - 如果 providernull
IllegalArgumentException - 如果没有与 category 对应的类别。
ClassCastException - 如果提供程序未实现由 category 定义的 Class

registerServiceProvider

public void registerServiceProvider(Object provider)
将一个服务提供程序对象添加到注册表。此提供程序与注册表中出现的实现了其 Class 的每个类别关联。

如果 provider 实现了 RegisterableService 接口,则将对其注册的每个类别调用一次 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 的对象,则不注销此对象。

如果 provider 实现了 RegisterableService 接口,则将调用其 onDeregistration 方法。

参数:
provider - 要注销的服务提供程序对象。
category - 要从其注销提供程序的类别。
返回:
如果提供程序以前已注册在相同的类别中,则返回 true,否则返回 false
抛出:
IllegalArgumentException - 如果 providernull
IllegalArgumentException - 如果没有与 category 对应的类别。
ClassCastException - 如果提供程序未实现由 category 定义的类。

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部