- java.lang.Object
-
- javax.imageio.spi.ServiceRegistry
-
- 已知直接子类:
-
IIORegistry
public class ServiceRegistryextends Object
用于Image I / O服务类型的服务提供程序实例的注册表。服务提供者存储在一个或多个类别中 ,每个类别
类
所有成员必须实现的类或接口(由类
对象描述)定义。此类支持的类别集仅限于以下标准Image I / O服务类型:
尝试加载不是上述类型之一的子类型的提供程序将导致
IllegalArgumentException
。有关加载服务提供程序的一般机制,请参阅
ServiceLoader
,这是此类使用的基础标准机制。只能注册给定叶类的单个实例(即
getClass()
返回的实际类,而不是任何继承的类或接口)。 也就是说,假设com.mycompany.mypkg.GreenImageReaderProvider
类的子类javax.imageio.spi.ImageReaderSpi
。 如果注册了GreenImageReaderProvider
实例,则它将存储在ImageReaderSpi
类定义的类别中。 如果注册了新的GreenImageReaderProvider
实例,它将替换先前的实例。 实际上,服务提供者对象通常是单例,因此这种行为是恰当的。服务提供者类应该是轻量级的并且可以快速加载。 这些接口的实现应避免对其他类和本机代码的复杂依赖性。 更复杂服务的通常模式是为重量级服务注册轻量级代理。
应用程序可以根据需要自定义注册表的内容,只要它具有适当的运行时权限即可。
有关如何创建和部署服务提供者的信息,请参阅
ServiceLoader
上的文档- 另请参见:
-
RegisterableService
,ServiceLoader
-
-
嵌套类汇总
嵌套类 变量和类型 类 描述 static interface
ServiceRegistry.Filter
ServiceRegistry.getServiceProviders
使用的简单过滤器接口,用于选择与任意标准匹配的提供程序。
-
构造方法摘要
构造方法 构造器 描述 ServiceRegistry(Iterator<类<?>> categories)
构造一个ServiceRegistry
实例,其中包含一组取自categories
参数的类别。
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 弃用的方法 变量和类型 方法 描述 boolean
contains(Object provider)
返回true
如果provider
当前注册。void
deregisterAll()
取消注册所有类别的所有当前注册的服务提供商。void
deregisterAll(类<?> category)
取消注册当前在给定类别下注册的所有服务提供者对象。void
deregisterServiceProvider(Object provider)
从包含它的所有类别中删除服务提供者对象。<T> boolean
deregisterServiceProvider(T provider, 类<T> category)
从给定类别中删除服务提供者对象。void
finalize()
已过时。finalize
方法已被弃用。Iterator<类<?>>
getCategories()
返回Iterator
的类
对象,指示当前的类别集。<T> T
getServiceProviderByClass(类<T> providerClass)
返回给定类类型的当前注册的服务提供者对象。<T> Iterator<T>
getServiceProviders(类<T> category, boolean useOrdering)
返回包含给定类别中所有注册服务提供者的Iterator
。<T> Iterator<T>
getServiceProviders(类<T> category, ServiceRegistry.Filter filter, boolean useOrdering)
返回Iterator
一个给定类别中满足由所提供的定义的条件的含服务提供程序对象ServiceRegistry.Filter
对象的filter
方法。static <T> Iterator<T>
lookupProviders(类<T> providerClass)
使用上下文类加载器定位并逐步实例化给定服务的可用提供程序。static <T> Iterator<T>
lookupProviders(类<T> providerClass, ClassLoader loader)
使用给定的类加载器搜索特定服务类的实现。void
registerServiceProvider(Object provider)
将服务提供者对象添加到注册表。<T> boolean
registerServiceProvider(T provider, 类<T> category)
将服务提供者对象添加到注册表。void
registerServiceProviders(Iterator<?> providers)
将一组服务提供程序对象从Iterator
到注册表。<T> boolean
setOrdering(类<T> category, T firstProvider, T secondProvider)
设置给定类别中两个服务提供者对象之间的成对排序。<T> boolean
unsetOrdering(类<T> category, T firstProvider, T secondProvider)
设置给定类别中两个服务提供者对象之间的成对排序。
-
-
-
构造方法详细信息
-
ServiceRegistry
public ServiceRegistry(Iterator<类<?>> categories)
构造一个ServiceRegistry
实例,其中包含一组取自categories
参数的类别。 类别必须都是类规范中列出的服务类型集的成员。- 参数
-
categories
- 包含类
对象的Iterator
用于定义类别。 - 异常
-
IllegalArgumentException
- 如果categories
是null
,或者其中一个类别不是允许的服务类型。
-
-
方法详细信息
-
lookupProviders
public static <T> Iterator<T> lookupProviders(类<T> providerClass, ClassLoader loader)
使用给定的类加载器搜索特定服务类的实现。服务类必须是类规范中列出的服务类型之一。 如果不是,则会抛出
IllegalArgumentException
。此方法将给定服务类的名称转换为类注释中所述的provider-configuration文件名,然后使用给定类加载器的
getResources
方法查找具有该名称的所有可用文件。 然后读取并解析这些文件以生成提供者类名称列表。 返回的迭代器使用给定的类加载器进行查找,然后实例化列表的每个元素。由于可以将扩展安装到正在运行的Java虚拟机中,因此每次调用此方法时都可能返回不同的结果。
- 参数类型
-
T
- providerClass的类型。 - 参数
-
providerClass
-类
对象,指示正在检测的服务提供商的类或接口。 -
loader
- 用于加载提供程序配置文件和实例化提供程序类的类加载程序,如果要使用系统类加载程序(或者,无法使用引导程序类加载程序),则使用null
。 - 结果
- 一个
Iterator
,以某种任意顺序为给定服务生成提供者对象。 如果提供程序配置文件违反指定格式或者无法找到并实例化提供程序类,则迭代器将抛出Error
。 - 异常
-
IllegalArgumentException
- 如果providerClass
是null
,或者它不是允许的服务类型之一。
-
lookupProviders
public static <T> Iterator<T> lookupProviders(类<T> providerClass)
使用上下文类加载器定位并逐步实例化给定服务的可用提供程序。 这种便捷方法相当于:ClassLoader cl = Thread.currentThread().getContextClassLoader(); return Service.providers(service, cl);
服务类必须是类规范中列出的服务类型之一。 如果不是,则会抛出
IllegalArgumentException
。- 参数类型
-
T
- providerClass的类型。 - 参数
-
providerClass
- 一个类
对象,指示正在检测的服务提供者的类或接口。 - 结果
- 一个
Iterator
,以某种任意顺序为给定服务生成提供者对象。 如果提供程序配置文件违反指定格式或无法找到并实例化提供程序类,则迭代器将抛出Error
。 - 异常
-
IllegalArgumentException
- 如果providerClass
是null
,或者它不是允许的服务类型之一。
-
getCategories
public Iterator<类<?>> getCategories()
返回Iterator
的类
对象,指示当前的类别集。 如果不存在类别,则迭代器将为空。- 结果
- 一个
Iterator
含有类
对象。
-
registerServiceProvider
public <T> boolean registerServiceProvider(T provider, 类<T> category)
将服务提供者对象添加到注册表。 提供者与给定类别相关联。如果
provider
实现RegisterableService
接口,则将调用其onRegistration
方法。 每次从类别中注销时,将调用其onDeregistration
方法,例如,如果删除了类别或注册表是垃圾回收。- 参数类型
-
T
- 提供者的类型。 - 参数
-
provider
- 该服务提供要注册的对象。 -
category
- 注册提供商的类别。 - 结果
- 如果之前未在同一类别类别中注册同一类的提供者,则为true。
- 异常
-
IllegalArgumentException
- 如果provider
是null
。 -
IllegalArgumentException
- 如果没有对应于category
。 -
ClassCastException
- 如果提供商未实施类
定义的category
。
-
registerServiceProvider
public void registerServiceProvider(Object provider)
将服务提供者对象添加到注册表。 提供程序与其实现的类
的注册表中的每个类别相关联。如果
provider
实现了RegisterableService
接口,则对于其注册的每个类别,将调用其onRegistration
方法一次。 每次从类别中注销或注册表最终确定时,将调用其onDeregistration
方法。- 参数
-
provider
- 要注册的服务提供者对象。 - 异常
-
IllegalArgumentException
- 如果provider
是null
。
-
registerServiceProviders
public void registerServiceProviders(Iterator<?> providers)
将一组服务提供程序对象从Iterator
到注册表。 每个提供程序都与其所实现的类
所在的注册表中的每个类别相关联。对于实现
RegisterableService
接口的providers
每个条目,其onRegistration
方法将针对其注册的每个类别调用一次。 每次从类别中注销或注册表最终确定时,将调用其onDeregistration
方法。- 参数
-
providers
- 包含要注册的服务提供者对象的Iterator。 - 异常
-
IllegalArgumentException
- 如果providers
是null
或者包含null
条目。
-
deregisterServiceProvider
public <T> boolean deregisterServiceProvider(T provider, 类<T> category)
从给定类别中删除服务提供者对象。 如果提供程序以前未注册,则不会发生任何操作并返回false
。 否则,返回true
。 如果注册了与provider
相同但不相等的对象(使用==
)到provider
,则不会取消注册。如果
provider
实现了RegisterableService
接口,则将调用其onDeregistration
方法。- 参数类型
-
T
- 提供者的类型。 - 参数
-
provider
- 要取消注册的服务提供者对象。 -
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(类<T> category, boolean useOrdering)
返回包含给定类别中所有注册服务提供者的Iterator
。 如果useOrdering
是false
,则迭代器将以任意顺序返回所有服务器提供程序对象。 否则,排序将遵循已设置的任何成对排序。 如果成对排序图包含循环,则不会返回属于循环的任何提供程序。- 参数类型
-
T
- 类别的类型。 - 参数
-
category
- 要检索的类别。 -
useOrdering
-true
如果在订购退回的对象时应考虑成对排序。 - 结果
- 包含来自给定类别的服务提供者对象的
Iterator
,可能是按顺序排列的。 - 异常
-
IllegalArgumentException
- 如果没有对应于category
。
-
getServiceProviders
public <T> Iterator<T> getServiceProviders(类<T> category, ServiceRegistry.Filter filter, boolean useOrdering)
返回Iterator
一个给定类别中满足由所提供的定义的条件的含服务提供程序对象ServiceRegistry.Filter
对象的filter
方法。useOrdering
参数使用与getServiceProviders(Class, boolean)
相同的规则控制结果的排序。- 参数类型
-
T
- 类别的类型。 - 参数
-
category
- 要检索的类别。 -
filter
- 将调用其filter
方法的ServiceRegistry.Filter
的实例。 -
useOrdering
-true
如果在订购退回的对象时应考虑成对排序。 - 结果
- 包含来自给定类别的服务提供者对象的
Iterator
,可能是按顺序排列的。 - 异常
-
IllegalArgumentException
- 如果没有对应于category
类别。
-
getServiceProviderByClass
public <T> T getServiceProviderByClass(类<T> providerClass)
返回给定类类型的当前注册的服务提供者对象。 最多允许在任何给定时间注册给定类的一个对象。 如果没有注册的对象具有所需的类类型,则返回null
。- 参数类型
-
T
- 提供者的类型。 - 参数
-
providerClass
- 所需服务提供者对象的类
。 - 结果
- 当前已注册的服务提供商对象具有所需的
类
类型,或null
是否存在。 - 异常
-
IllegalArgumentException
- 如果providerClass
是null
。
-
setOrdering
public <T> boolean setOrdering(类<T> category, T firstProvider, T secondProvider)
设置给定类别中两个服务提供者对象之间的成对排序。 如果一个或两个对象当前未在给定类别中注册,或者已经设置了所需的顺序,则不会发生任何事情并返回false
。 如果先前的提供商是反向订购的,那么该订单将被删除。当
useOrdering
参数为true
时,getServiceProviders
方法将使用该排序。- 参数类型
-
T
- 类别的类型。 - 参数
-
category
- 一个类
对象,指示要在其下建立首选项的类别。 -
firstProvider
- 首选提供商。 -
secondProvider
-提供到firstProvider
是优选的。 - 结果
-
true
如果建立了先前未设置的排序。 - 异常
-
IllegalArgumentException
- 如果任一提供者是null
或它们是同一个对象。 -
IllegalArgumentException
- 如果没有对应于category
类别。
-
unsetOrdering
public <T> boolean unsetOrdering(类<T> category, T firstProvider, T secondProvider)
设置给定类别中两个服务提供者对象之间的成对排序。 如果一个或两个对象当前未在给定类别中注册,或者当前未在它们之间设置任何排序,则不会发生任何操作并返回false
。当
useOrdering
参数为true
时,getServiceProviders
方法将使用该排序。- 参数类型
-
T
- 类别的类型。 - 参数
-
category
- 一个类
对象,指示要取消偏好的类别。 -
firstProvider
- 以前首选的提供商。 -
secondProvider
-提供到firstProvider
以前优选的。 - 结果
-
true
如果先前设定的排序被解除。 - 异常
-
IllegalArgumentException
- 如果任一提供者是null
或者它们是同一个对象。 -
IllegalArgumentException
- 如果没有对应于category
。
-
deregisterAll
public void deregisterAll(类<?> category)
取消注册当前在给定类别下注册的所有服务提供者对象。- 参数
-
category
- 要清空的类别。 - 异常
-
IllegalArgumentException
- 如果没有对应于category
类别。
-
deregisterAll
public void deregisterAll()
取消注册所有类别的所有当前注册的服务提供商。
-
finalize
@Deprecated(since="9")public void finalize() throws Throwable
Deprecated.Thefinalize
method has been deprecated. Subclasses that overridefinalize
in order to perform cleanup should be modified to use alternative cleanup mechanisms and to remove the overridingfinalize
method. When overriding thefinalize
method, its implementation must explicitly ensure thatsuper.finalize()
is invoked as described inObject.finalize()
. See the specification forObject.finalize()
for further information about migration options.在垃圾回收之前完成此对象。 调用deregisterAll
方法以取消注册所有当前注册的服务提供者。 不应从应用程序代码调用此方法。- 重写:
-
finalize
类Object
- 异常
-
Throwable
- 如果在超类完成期间发生错误。 - 另请参见:
-
WeakReference
,PhantomReference
-
-