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.