public class ServiceRegistry extends Object
一个服务是一个接口(通常是抽象类)。一个服务提供商是具体实施服务。在提供程序中的类通常实现由服务本身定义的类或子类的接口或子类。
服务提供商存储在一个或多个类别,其中每一个是由类定义的接口(通过类对象描述),它的所有成员都必须执行。可动态更改类别集的集合。
只有一个实例的一个给定的叶类(即实际的类返回getClass(),反对任何继承类或接口)可注册。那就是,假设com.mycompany.mypkg.GreenServiceProvider类实现com.mycompany.mypkg.MyService接口。如果一个GreenServiceProvider注册实例,它将存储在由MyService类定义的类。如果GreenServiceProvider新实例的注册,它将取代以前的实例。在实践中,服务提供者的对象通常是单身,所以这种行为是适当的。
声明一个服务提供商,一services目录放在META-INF目录,在每一个JAR文件存在。此目录包含一个为每个服务提供程序接口的文件,该接口上有一个或多个实现类存在于该文件中。例如,如果JAR文件包含一个名为com.mycompany.mypkg.MyServiceImpl实施javax.someapi.SomeService接口,JAR文件将包含一个文件名为:
META-INF /服务/ javax.someapi.someservice包含线:
com.mycompany.mypkg.myservice
服务提供程序类应该是轻量级和快速加载。这些接口的实现应避免其他类和本地代码的复杂的依赖关系。更复杂的服务的通常模式是注册一个轻量级的代理服务器的重量级服务。
一个应用程序可以自定义注册表的内容,因为它认为合适,只要它有适当的运行时权限。
在宣布服务提供商的更多细节,和一般的JAR格式,看到 JAR File Specification。
RegisterableService
| Modifier and Type | Class and Description |
|---|---|
static interface |
ServiceRegistry.Filter
通过
ServiceRegistry.getServiceProviders用来选择匹配一个任意的标准提供了一个简单的过滤器接口。
|
| Constructor and Description |
|---|
ServiceRegistry(Iterator<类<?>> categories)
构建了一个
ServiceRegistry实例的一组从
categories参数类别。
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
contains(Object provider)
返回
true如果
provider现在注册。
|
void |
deregisterAll()
撤销目前所有已注册的服务提供者从所有类别。
|
void |
deregisterAll(类<?> category)
撤销所有的服务对象目前注册给定类别下。
|
void |
deregisterServiceProvider(Object provider)
从包含它的所有类别中移除服务提供程序对象。
|
<T> boolean |
deregisterServiceProvider(T provider, 类<T> category)
从给定类别中移除服务提供程序对象。
|
void |
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)
在一个给定类别中设置两个服务提供者对象之间的两两排序。
|
public ServiceRegistry(Iterator<类<?>> categories)
ServiceRegistry实例的一组从
categories参数类别。
categories -
Iterator含
类对象被用来定义类。
null
categories
IllegalArgumentException。
public static <T> Iterator<T> lookupProviders(类<T> providerClass, ClassLoader loader)
该方法将给定的服务类为供应商配置文件中描述的类注释然后使用指定的类加载器找到具有该名称的所有可用的文件getResources方法名称。然后读取这些文件并进行解析以生成提供程序类名称的列表。返回的迭代器使用给定的类加载器查找然后实例化列表中的每个元素。
因为要安装到一个正在运行的java虚拟机扩展是可能的,这种方法可以在每次调用之后返回不同的结果。
T的providerclass类型。
providerClass -
类object指示该服务提供商被检测到的类或接口。
loader的类加载器来加载提供了配置文件和初始化提供程序类,或
null如果系统类装载器(或失败,引导类装入器)是用于。
Iterator产生给定的服务对象,以任意顺序。迭代器将如果提供程序配置文件违反指定的格式或提供程序类不能被发现,引发
Error实例化。
null
providerClass
IllegalArgumentException。
public static <T> Iterator<T> lookupProviders(类<T> providerClass)
类加载器CL =线程。currentthread()。getcontextclassloader();返回服务。供应商(服务,氯离子);
T的providerclass类型。
providerClass -
类object指示该服务提供商被检测到的类或接口。
Iterator产生给定的服务对象,以任意顺序。迭代器将如果提供程序配置文件违反指定的格式或提供程序类不能被发现,引发
Error实例化。
null
providerClass
IllegalArgumentException。
public Iterator<类<?>> getCategories()
类指示当前设置
Iterator。如果没有类别存在,迭代器将是空的。
Iterator含
类objects。
public <T> boolean registerServiceProvider(T provider,
类<T> category)
如果provider实现RegisterableService接口,其onRegistration方法会被调用。其onDeregistration方法将被调用,每次注销一类,例如如果一个类被删除或注册表垃圾收集。
T -供应商的类型。
provider -服务提供对象被注册。
category的范畴下,登记的供应商。
null
provider
IllegalArgumentException。
IllegalArgumentException -如果没有对应的类
category。
ClassCastException如果供应商没有实现定义的
类
category。
public void registerServiceProvider(Object provider)
类实现相关。
如果provider实现RegisterableService接口,其onRegistration方法将被调用一次,每个类别是注册在。其onDeregistration方法将被调用,每次都是从一个范畴或注销登记完成时。
provider -服务提供者对象被注册。
null
provider
IllegalArgumentException。
public void registerServiceProviders(Iterator<?> providers)
Iterator到注册表。每个供应商在每个类别在注册表中的
类实现相关。
每一项的providers实现RegisterableService接口,其onRegistration方法将被调用一次,每个类别是注册在。其onDeregistration方法将被调用,每次都是从一个范畴或注销登记完成时。
providers -一个迭代器对象包含服务提供商注册。
IllegalArgumentException -如果
providers是
null或包含一个
null入门。
public <T> boolean deregisterServiceProvider(T provider,
类<T> category)
false返回。否则,
true返回。如果类
provider相同的对象但不平等(使用
==)来
provider注册,不会被注销。
如果provider实现RegisterableService接口,其onDeregistration方法会被调用。
T -供应商的类型。
provider -服务提供者对象被注销。
category -从注销的提供者的范畴。
true如果提供者是以前在同一类注册,
false否则。
null
provider
IllegalArgumentException。
IllegalArgumentException -如果没有对应的类
category。
ClassCastException如果供应商没有实现定义的
category类。
public void deregisterServiceProvider(Object provider)
provider -服务提供者对象被注销。
null
provider
IllegalArgumentException。
public boolean contains(Object provider)
true如果
provider现在注册。
provider -服务提供者对象进行查询。
true如果给定的供应商已注册。
null
provider
IllegalArgumentException。
public <T> Iterator<T> getServiceProviders(类<T> category, boolean useOrdering)
Iterator注册服务商在给定的类别。如果
useOrdering是
false,迭代器将返回所有服务器提供者对象以任意顺序。否则,订货会尊重任何两两序已设置。如果成对排序图中包含的周期,任何供应商,属于一个周期将不会退还。
T类别的类型。
category的范畴是从。
useOrdering -
true如果成对排序应考虑订购返回的对象。
Iterator含服务对象从特定的范畴,可能为。
IllegalArgumentException -如果没有对应的类
category。
public <T> Iterator<T> getServiceProviders(类<T> category, ServiceRegistry.Filter filter, boolean useOrdering)
Iterator对象在一个给定的类别,满足所提供的
ServiceRegistry.Filter对象的
filter法实施准则。
的useOrdering参数控制使用同样的规则getServiceProviders(Class, boolean)结果排序。
T类别的类型。
category的范畴是从。
filter -
ServiceRegistry.Filter的
filter方法将被调用的实例。
useOrdering -
true如果成对排序应考虑订购返回的对象。
Iterator含服务对象从特定的范畴,可能为。
IllegalArgumentException -如果没有对应的类
category。
public <T> T getServiceProviderByClass(类<T> providerClass)
null返回。
T -供应商的类型。
providerClass -
类所需服务提供者对象。
类type,或
null是不存在。
null
providerClass
IllegalArgumentException。
public <T> boolean setOrdering(类<T> category, T firstProvider, T secondProvider)
false返回。如果供应商先前被订购在相反的方向,那次序被移除。
该命令将使用的方法时,他们getServiceProviders useOrdering论点是true。
T类别的类型。
category -
类指示的范畴下,偏好是建立。
firstProvider的首选供应商。
secondProvider的提供者,
firstProvider优先。
true如果以前取消订购了。
IllegalArgumentException -如果供应商是
null或者他们是同一个对象。
IllegalArgumentException -如果没有对应的类
category。
public <T> boolean unsetOrdering(类<T> category, T firstProvider, T secondProvider)
false返回。
订货会用的getServiceProviders方法useOrdering说法是当true。
T类别的类型。
category -
类指示范畴下的偏好是政教分离。
firstProvider -以前的首选供应商。
secondProvider的提供者,
firstProvider前身是首选。
true如果预先设定的顺序被解散。
IllegalArgumentException -如果供应商是
null或者他们是同一个对象。
IllegalArgumentException -如果没有对应的类
category。
public void deregisterAll(类<?> category)
category的范畴是空的。
IllegalArgumentException -如果没有对应的类
category。
public void deregisterAll()
public void finalize()
throws Throwable
deregisterAll方法叫做注销当前所有已注册的服务提供者。此方法不应该从应用程序代码调用。
finalize 方法重写,继承类
Object
Throwable -如果在父类定型时发生错误。
WeakReference,
PhantomReference
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.