uTools-Manuals/docs/java/javax/imageio/spi/ServiceRegistry.html

909 lines
43 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="header">
<div class="subTitle">
javax.imageio.spi
</div>
<h2 class="title" title="Class ServiceRegistry">Class ServiceRegistry</h2>
</div><div class="contentContainer">
<ul class="inheritance">
<li><a href="../../../java/lang/Object.html" title="class in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>javax.imageio.spi.ServiceRegistry</li>
</ul> </li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>
已知直接子类:
</dt>
<dd>
<span><a href="../../../javax/imageio/spi/IIORegistry.html" title="javax.imageio.spi中的类">IIORegistry</a></span>
</dd>
</dl>
<hr/> <br/> <pre>public class <span class="typeNameLabel">ServiceRegistry</span>
extends <a href="../../../java/lang/Object.html" title="class in java.lang">Object</a></pre>
<div class="block">
<span>服务提供商实例的注册表。</span>
<p> <span>一个<i>服务</i>是一组众所周知的接口(通常是抽象的)类。</span> <span><i>服务提供商</i><i>服务</i>的具体实现。</span> <span>提供者中的类通常实现接口或子类化服务本身定义的类。</span> </p>
<p> <span>服务提供商存储在一个或多个<i>类别中</i> ,每个类别由其所有成员必须实现的一类接口(由<code></code>对象描述)定义。</span> <span>可以动态地更改类别集合。</span> </p>
<p> <span>只有一个给定叶类的一个实例(也就是<code>getClass()</code>返回的实际类,而不是任何继承的类或接口)可以被注册。</span> <span>也就是说,假设<code>com.mycompany.mypkg.GreenServiceProvider</code>类实现了<code>com.mycompany.mypkg.MyService</code>接口。</span> <span>如果注册了一个<code>GreenServiceProvider</code>实例,它将被存储在由<code>MyService</code>类定义的类别中。</span> <span>如果一个新的实例<code>GreenServiceProvider</code>注册,它将替换以前的实例。</span> <span>实际上,服务提供商对象通常是单身,因此这种行为是合适的。</span> </p>
<p> <span>要声明服务提供商, <code>services</code>子目录将放置在每个JAR文件中存在的<code>META-INF</code>目录中。</span> <span>此目录包含每个服务提供程序接口的文件该接口在JAR文件中具有一个或多个实现类。</span> <span>例如如果JAR文件包含了一个名为类<code>com.mycompany.mypkg.MyServiceImpl</code>它实现了<code>javax.someapi.SomeService</code>接口JAR文件将包含一个文件名为</span> </p>
<pre> <span>META-INF/services/javax.someapi.SomeService</span> </pre>
<span>包含行:</span>
<pre> <span>com.mycompany.mypkg.MyService</span> </pre>
<p> <span>服务提供商类应该是轻量级的,并且加载速度快。</span> <span>这些接口的实现应避免对其他类和本地代码的复杂依赖。</span> <span>更复杂服务的通常模式是为重量级服务注册轻量级代理。</span> </p>
<p> <span>只要具有适当的运行时权限,应用程序就可以自定义注册表的内容。</span> </p>
<p> <span>有关声明服务提供商的更多详细信息以及JAR格式请参阅<a href="../../../../technotes/guides/jar/jar.html">JAR File Specification</a></span> </p>
</div>
<dl>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../javax/imageio/spi/RegisterableService.html" title="javax.imageio.spi中的接口"><code>RegisterableService</code></a></span>
</dd>
</dl> </li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- --> </a> <h3>Nested Class Summary</h3>
<table border="0" cellpadding="3" cellspacing="0" class="memberSummary" summary="Nested Class Summary table, listing nested classes, and an explanation">
<caption>
<span>Nested Classes</span>
<span class="tabEnd"> </span>
</caption>
<tbody>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Class and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static interface </code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/imageio/spi/ServiceRegistry.Filter.html" title="interface in javax.imageio.spi">ServiceRegistry.Filter</a></span></code>
<div class="block">
通过使用一个简单的过滤器接口
<code>ServiceRegistry.getServiceProviders</code>选择提供商任意条件匹配的。
</div> </td>
</tr>
</tbody>
</table> </li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- --> </a> <h3>构造方法摘要</h3>
<table border="0" cellpadding="3" cellspacing="0" class="memberSummary" summary="Constructor Summary table, listing constructors, and an explanation">
<caption>
<span>构造方法</span>
<span class="tabEnd"> </span>
</caption>
<tbody>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../javax/imageio/spi/ServiceRegistry.html#ServiceRegistry-java.util.Iterator-">ServiceRegistry</a></span>(<a href="../../../java/util/Iterator.html" title="interface in java.util">Iterator</a>&lt;<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;?&gt;&gt; categories)</code>
<div class="block">
构造一个
<code>ServiceRegistry</code>实例,其中一组类别取自
<code>categories</code>参数。
</div> </td>
</tr>
</tbody>
</table> </li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- --> </a> <h3>方法摘要</h3>
<table border="0" cellpadding="3" cellspacing="0" class="memberSummary" summary="Method Summary table, listing methods, and an explanation">
<caption>
<span class="activeTableTab" id="t0"><span>所有方法</span><span class="tabEnd"> </span></span>
<span class="tableTab" id="t1"><span><a href="javascript:show(1);">静态方法</a></span><span class="tabEnd"> </span></span>
<span class="tableTab" id="t2"><span><a href="javascript:show(2);">接口方法</a></span><span class="tabEnd"> </span></span>
<span class="tableTab" id="t4"><span><a href="javascript:show(8);">具体的方法</a></span><span class="tabEnd"> </span></span>
</caption>
<tbody>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor" id="i0">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/imageio/spi/ServiceRegistry.html#contains-java.lang.Object-">contains</a></span>(<a href="../../../java/lang/Object.html" title="class in java.lang">Object</a> provider)</code>
<div class="block">
返回
<code>true</code>如果
<code>provider</code>当前注册。
</div> </td>
</tr>
<tr class="rowColor" id="i1">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/imageio/spi/ServiceRegistry.html#deregisterAll--">deregisterAll</a></span>()</code>
<div class="block">
取消注册所有类别的所有当前注册服务提供商。
</div> </td>
</tr>
<tr class="altColor" id="i2">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/imageio/spi/ServiceRegistry.html#deregisterAll-java.lang.Class-">deregisterAll</a></span>(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;?&gt; category)</code>
<div class="block">
取消注册目前在给定类别下注册的所有服务提供商对象。
</div> </td>
</tr>
<tr class="rowColor" id="i3">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/imageio/spi/ServiceRegistry.html#deregisterServiceProvider-java.lang.Object-">deregisterServiceProvider</a></span>(<a href="../../../java/lang/Object.html" title="class in java.lang">Object</a> provider)</code>
<div class="block">
从包含它的所有类别中删除服务提供商对象。
</div> </td>
</tr>
<tr class="altColor" id="i4">
<td class="colFirst"><code>&lt;T&gt; boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/imageio/spi/ServiceRegistry.html#deregisterServiceProvider-T-java.lang.Class-">deregisterServiceProvider</a></span>(T provider, <a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; category)</code>
<div class="block">
从给定的类别中删除服务提供者对象。
</div> </td>
</tr>
<tr class="rowColor" id="i5">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/imageio/spi/ServiceRegistry.html#finalize--">finalize</a></span>()</code>
<div class="block">
在垃圾收集之前完成此对象。
</div> </td>
</tr>
<tr class="altColor" id="i6">
<td class="colFirst"><code><a href="../../../java/util/Iterator.html" title="interface in java.util">Iterator</a>&lt;<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;?&gt;&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/imageio/spi/ServiceRegistry.html#getCategories--">getCategories</a></span>()</code>
<div class="block">
返回一个
<code>Iterator</code>
<code></code>对象,指示当前的一组类别。
</div> </td>
</tr>
<tr class="rowColor" id="i7">
<td class="colFirst"><code>&lt;T&gt; T</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/imageio/spi/ServiceRegistry.html#getServiceProviderByClass-java.lang.Class-">getServiceProviderByClass</a></span>(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; providerClass)</code>
<div class="block">
返回给定类类型的当前注册的服务提供者对象。
</div> </td>
</tr>
<tr class="altColor" id="i8">
<td class="colFirst"><code>&lt;T&gt; <a href="../../../java/util/Iterator.html" title="interface in java.util">Iterator</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/imageio/spi/ServiceRegistry.html#getServiceProviders-java.lang.Class-boolean-">getServiceProviders</a></span>(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; category, boolean useOrdering)</code>
<div class="block">
返回一个
<code>Iterator</code>包含给定类别中所有已注册的服务商。
</div> </td>
</tr>
<tr class="rowColor" id="i9">
<td class="colFirst"><code>&lt;T&gt; <a href="../../../java/util/Iterator.html" title="interface in java.util">Iterator</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/imageio/spi/ServiceRegistry.html#getServiceProviders-java.lang.Class-javax.imageio.spi.ServiceRegistry.Filter-boolean-">getServiceProviders</a></span>(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; category, <a href="../../../javax/imageio/spi/ServiceRegistry.Filter.html" title="interface in javax.imageio.spi">ServiceRegistry.Filter</a> filter, boolean useOrdering)</code>
<div class="block">
返回
<code>Iterator</code>一个给定类别中满足由所提供的定义的条件的含服务提供程序对象
<code>ServiceRegistry.Filter</code>对象的
<code>filter</code>方法。
</div> </td>
</tr>
<tr class="altColor" id="i10">
<td class="colFirst"><code>static &lt;T&gt; <a href="../../../java/util/Iterator.html" title="interface in java.util">Iterator</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/imageio/spi/ServiceRegistry.html#lookupProviders-java.lang.Class-">lookupProviders</a></span>(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; providerClass)</code>
<div class="block">
使用上下文类加载器定位并递增实例化给定服务的可用提供程序。
</div> </td>
</tr>
<tr class="rowColor" id="i11">
<td class="colFirst"><code>static &lt;T&gt; <a href="../../../java/util/Iterator.html" title="interface in java.util">Iterator</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/imageio/spi/ServiceRegistry.html#lookupProviders-java.lang.Class-java.lang.ClassLoader-">lookupProviders</a></span>(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; providerClass, <a href="../../../java/lang/ClassLoader.html" title="class in java.lang">ClassLoader</a> loader)</code>
<div class="block">
使用给定的类加载器搜索特定服务类的实现。
</div> </td>
</tr>
<tr class="altColor" id="i12">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/imageio/spi/ServiceRegistry.html#registerServiceProvider-java.lang.Object-">registerServiceProvider</a></span>(<a href="../../../java/lang/Object.html" title="class in java.lang">Object</a> provider)</code>
<div class="block">
将服务提供者对象添加到注册表。
</div> </td>
</tr>
<tr class="rowColor" id="i13">
<td class="colFirst"><code>&lt;T&gt; boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/imageio/spi/ServiceRegistry.html#registerServiceProvider-T-java.lang.Class-">registerServiceProvider</a></span>(T provider, <a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; category)</code>
<div class="block">
将服务提供者对象添加到注册表。
</div> </td>
</tr>
<tr class="altColor" id="i14">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/imageio/spi/ServiceRegistry.html#registerServiceProviders-java.util.Iterator-">registerServiceProviders</a></span>(<a href="../../../java/util/Iterator.html" title="interface in java.util">Iterator</a>&lt;?&gt; providers)</code>
<div class="block">
添加一组从
<code>Iterator</code>到注册表的服务提供者对象。
</div> </td>
</tr>
<tr class="rowColor" id="i15">
<td class="colFirst"><code>&lt;T&gt; boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/imageio/spi/ServiceRegistry.html#setOrdering-java.lang.Class-T-T-">setOrdering</a></span>(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; category, T firstProvider, T secondProvider)</code>
<div class="block">
在给定类别中的两个服务提供者对象之间设置成对排序。
</div> </td>
</tr>
<tr class="altColor" id="i16">
<td class="colFirst"><code>&lt;T&gt; boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/imageio/spi/ServiceRegistry.html#unsetOrdering-java.lang.Class-T-T-">unsetOrdering</a></span>(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; category, T firstProvider, T secondProvider)</code>
<div class="block">
在给定类别中的两个服务提供者对象之间设置成对排序。
</div> </td>
</tr>
</tbody>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- --> </a> <h3>Methods inherited from class java.lang.<a href="../../../java/lang/Object.html" title="class in java.lang">Object</a></h3> <code><a href="../../../java/lang/Object.html#clone--">clone</a>, <a href="../../../java/lang/Object.html#equals-java.lang.Object-">equals</a>, <a href="../../../java/lang/Object.html#getClass--">getClass</a>, <a href="../../../java/lang/Object.html#hashCode--">hashCode</a>, <a href="../../../java/lang/Object.html#notify--">notify</a>, <a href="../../../java/lang/Object.html#notifyAll--">notifyAll</a>, <a href="../../../java/lang/Object.html#toString--">toString</a>, <a href="../../../java/lang/Object.html#wait--">wait</a>, <a href="../../../java/lang/Object.html#wait-long-">wait</a>, <a href="../../../java/lang/Object.html#wait-long-int-">wait</a></code></li>
</ul> </li>
</ul> </li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- --> </a> <h3>构造方法详细信息</h3> <a name="ServiceRegistry-java.util.Iterator-">
<!-- --> </a>
<ul class="blockListLast">
<li class="blockList"> <h4>ServiceRegistry</h4> <pre>public ServiceRegistry(<a href="../../../java/util/Iterator.html" title="interface in java.util">Iterator</a>&lt;<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;?&gt;&gt; categories)</pre>
<div class="block">
构造一个
<code>ServiceRegistry</code>实例,其中包含一组从
<code>categories</code>参数获取的
<code>categories</code>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>categories</code> - 一个
<code>Iterator</code>包含用于定义类别的
<code></code>对象。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果
<code>categories</code>
<code>null</code>
</dd>
</dl> </li>
</ul> </li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- --> </a> <h3>方法详细信息</h3> <a name="lookupProviders-java.lang.Class-java.lang.ClassLoader-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>lookupProviders</h4> <pre>public static &lt;T&gt; <a href="../../../java/util/Iterator.html" title="interface in java.util">Iterator</a>&lt;T&gt; lookupProviders(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; providerClass,
<a href="../../../java/lang/ClassLoader.html" title="class in java.lang">ClassLoader</a> loader)</pre>
<div class="block">
<span>使用给定的类加载器搜索特定服务类的实现。</span>
<p> <span>此方法将给定服务类的名称转换为类注释中所述的提供者配置文件名,然后使用给定类加载器的<code>getResources</code>方法查找具有该名称的所有可用文件。</span> <span>然后读取和解析这些文件以产生一个提供者类名称列表。</span> <span>返回的迭代器使用给定的类加载器来查找列表中的每个元素,然后实例化。</span> </p>
<p> <span>因为可以将扩展安装到正在运行的Java虚拟机中所以每次调用此方法时都可能会返回不同的结果。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数类型</span>
</dt>
<dd>
<code>T</code> -
<code>T</code>的类型。
</dd>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>providerClass</code> - 一个
<code></code>对象,指示正在检测到的服务提供商的类或接口。
</dd>
<dd>
<code>loader</code> -类加载器用于加载提供者配置文件和实例化提供者类,或
<code>null</code>如果要使用的系统类加载器(或,如若不然引导类加载器)的。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
<span><code>Iterator</code>以某种任意顺序产生给定服务的提供者对象。</span>
<span>迭代器都将抛出一个<code>Error</code>如果提供者配置文件违反指定的格式,或者如果一个供应商类不能被发现和实例化。</span>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果
<code>providerClass</code>
<code>null</code>
</dd>
</dl> </li>
</ul> <a name="lookupProviders-java.lang.Class-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>lookupProviders</h4> <pre>public static &lt;T&gt; <a href="../../../java/util/Iterator.html" title="interface in java.util">Iterator</a>&lt;T&gt; lookupProviders(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; providerClass)</pre>
<div class="block">
<span>使用上下文类加载器定位并递增实例化给定服务的可用提供程序。</span>
<span>这种方便方法相当于:</span>
<pre> <span>ClassLoader cl = Thread.currentThread().getContextClassLoader();
return Service.providers(service, cl);</span> </pre>
</div>
<dl>
<dt>
<span class="paramLabel">参数类型</span>
</dt>
<dd>
<code>T</code> -
<code>T</code>的类型。
</dd>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>providerClass</code> - 一个指示所检测到的服务提供商的类或接口的
<code></code>对象。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
<span><code>Iterator</code>以某种任意顺序产生给定服务的提供者对象。</span>
<span>迭代器都将抛出一个<code>Error</code>如果提供者配置文件违反指定的格式,或者如果一个供应商类不能被发现和实例化。</span>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果
<code>providerClass</code>
<code>null</code>
</dd>
</dl> </li>
</ul> <a name="getCategories--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getCategories</h4> <pre>public <a href="../../../java/util/Iterator.html" title="interface in java.util">Iterator</a>&lt;<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;?&gt;&gt; getCategories()</pre>
<div class="block">
<span>返回<code>Iterator</code><code></code>对象,指示当前的类别集。</span>
<span>如果没有类别,迭代器将为空。</span>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
一个
<code>Iterator</code>包含
<code></code>对象。
</dd>
</dl> </li>
</ul> <a name="registerServiceProvider-java.lang.Object-java.lang.Class-">
<!-- --> </a><a name="registerServiceProvider-T-java.lang.Class-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>registerServiceProvider</h4> <pre>public &lt;T&gt; boolean registerServiceProvider(T provider,
<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; category)</pre>
<div class="block">
<span>将服务提供者对象添加到注册表。</span>
<span>提供者与给定类别相关联。</span>
<p> <span>如果<code>provider</code>实现了<code>RegisterableService</code>接口,则会调用其<code>onRegistration</code>方法。</span> <span>每当它从类别中注销时,将会调用其<code>onDeregistration</code>方法,例如,如果某个类别被删除或注册表被垃圾回收。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数类型</span>
</dt>
<dd>
<code>T</code> - 提供者的类型。
</dd>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>provider</code> - 服务提供要注册的对象。
</dd>
<dd>
<code>category</code> - 注册提供者的类别。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
如果没有同一类的提供者以前在同一类别类别中注册则为true。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果
<code>provider</code>
<code>null</code>
</dd>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果没有类别对应
<code>category</code>
</dd>
<dd>
<code><a href="../../../java/lang/ClassCastException.html" title="class in java.lang">ClassCastException</a></code> - 如果提供者没有实现由
<code></code>定义的
<code>category</code>
</dd>
</dl> </li>
</ul> <a name="registerServiceProvider-java.lang.Object-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>registerServiceProvider</h4> <pre>public void registerServiceProvider(<a href="../../../java/lang/Object.html" title="class in java.lang">Object</a> provider)</pre>
<div class="block">
<span>将服务提供者对象添加到注册表。</span>
<span>提供者在其<code></code>的注册表中存在的每个类别中关联。</span>
<p> <span>如果<code>provider</code>实现了<code>RegisterableService</code>接口,则其<code>onRegistration</code>方法将在其<code>onRegistration</code>的每个类别被调用一次。</span> <span>它的<code>onDeregistration</code>方法将在每次从类别注销时或注册表完成时被调用。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>provider</code> - 要注册的服务提供商对象。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果
<code>provider</code>
<code>null</code>
</dd>
</dl> </li>
</ul> <a name="registerServiceProviders-java.util.Iterator-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>registerServiceProviders</h4> <pre>public void registerServiceProviders(<a href="../../../java/util/Iterator.html" title="interface in java.util">Iterator</a>&lt;?&gt; providers)</pre>
<div class="block">
<span>添加一组服务提供者对象,从<code>Iterator</code>到注册表。</span>
<span>每个提供者在其<code></code>的注册表中存在的每个类别中关联。</span>
<p> <span>对于实现<code>providers</code>接口的<code>RegisterableService</code>每个条目,其<code>onRegistration</code>方法对于其<code>onRegistration</code>的每个类别将被调用一次。</span> <span>它的<code>onDeregistration</code>方法将在每次从类别注销或注册表完成时被调用。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>providers</code> - 一个包含要注册的服务提供商对象的迭代器。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果
<code>providers</code>
<code>null</code>或包含一个
<code>null</code>条目。
</dd>
</dl> </li>
</ul> <a name="deregisterServiceProvider-java.lang.Object-java.lang.Class-">
<!-- --> </a><a name="deregisterServiceProvider-T-java.lang.Class-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>deregisterServiceProvider</h4> <pre>public &lt;T&gt; boolean deregisterServiceProvider(T provider,
<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; category)</pre>
<div class="block">
<span>从给定的类别中删除服务提供者对象。</span>
<span>如果提供商以前没有注册,则不会发生任何反应,并返回<code>false</code></span>
<span>否则返回<code>true</code></span>
<span>如果与<code>provider</code>相同但不相等(使用<code>==</code> )至<code>provider</code>被注册,则不会被注销。</span>
<p> <span>如果<code>provider</code>实现了<code>RegisterableService</code>接口,则会调用其<code>onDeregistration</code>方法。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数类型</span>
</dt>
<dd>
<code>T</code> - 提供者的类型。
</dd>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>provider</code> - 要注销的服务提供商对象。
</dd>
<dd>
<code>category</code> - 从中注销提供者的类别。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
<code>true</code>如果提供商以前注册在同一类别类别中,
<code>false</code> false。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果
<code>provider</code>
<code>null</code>
</dd>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果没有类别对应
<code>category</code>
</dd>
<dd>
<code><a href="../../../java/lang/ClassCastException.html" title="class in java.lang">ClassCastException</a></code> - 如果提供程序不实现由
<code>category</code>定义的类。
</dd>
</dl> </li>
</ul> <a name="deregisterServiceProvider-java.lang.Object-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>deregisterServiceProvider</h4> <pre>public void deregisterServiceProvider(<a href="../../../java/lang/Object.html" title="class in java.lang">Object</a> provider)</pre>
<div class="block">
从包含它的所有类别中删除服务提供商对象。
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>provider</code> - 要注销的服务提供商对象。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果
<code>provider</code>
<code>null</code>
</dd>
</dl> </li>
</ul> <a name="contains-java.lang.Object-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>contains</h4> <pre>public boolean contains(<a href="../../../java/lang/Object.html" title="class in java.lang">Object</a> provider)</pre>
<div class="block">
返回
<code>true</code>如果
<code>provider</code>当前注册。
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>provider</code> - 要查询的服务提供商对象。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
<code>true</code>如果给定的提供者已经注册。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果
<code>provider</code>
<code>null</code>
</dd>
</dl> </li>
</ul> <a name="getServiceProviders-java.lang.Class-boolean-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getServiceProviders</h4> <pre>public &lt;T&gt; <a href="../../../java/util/Iterator.html" title="interface in java.util">Iterator</a>&lt;T&gt; getServiceProviders(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; category,
boolean useOrdering)</pre>
<div class="block">
<span>返回一个<code>Iterator</code>包含给定类别中所有已注册的服务商。</span>
<span>如果<code>useOrdering</code><code>false</code> ,则迭代器将以任意顺序返回所有服务器提供程序对象。</span>
<span>否则,订单将尊重已设置的任何成对订单。</span>
<span>如果成对订单的图形包含循环,则不会返回属于循环的任何提供程序。</span>
</div>
<dl>
<dt>
<span class="paramLabel">参数类型</span>
</dt>
<dd>
<code>T</code> - 类别的类型。
</dd>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>category</code> -
<code>category</code>的类别。
</dd>
<dd>
<code>useOrdering</code> -
<code>true</code>如果在订购返回的对象时应考虑成对订购。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
一个
<code>Iterator</code>来自给定类别的服务提供者对象的
<code>Iterator</code> ,可能是有序的。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果没有类别对应
<code>category</code>
</dd>
</dl> </li>
</ul> <a name="getServiceProviders-java.lang.Class-javax.imageio.spi.ServiceRegistry.Filter-boolean-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getServiceProviders</h4> <pre>public &lt;T&gt; <a href="../../../java/util/Iterator.html" title="interface in java.util">Iterator</a>&lt;T&gt; getServiceProviders(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; category,
<a href="../../../javax/imageio/spi/ServiceRegistry.Filter.html" title="interface in javax.imageio.spi">ServiceRegistry.Filter</a> filter,
boolean useOrdering)</pre>
<div class="block">
<span>返回<code>Iterator</code>一个给定类别中满足由所提供的定义的条件的含服务提供程序对象<code>ServiceRegistry.Filter</code>对象的<code>filter</code>方法。</span>
<p> <span><code>useOrdering</code>参数使用与<code>getServiceProviders(Class, boolean)</code>相同的规则来控制结果的排序。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数类型</span>
</dt>
<dd>
<code>T</code> - 类别的类型。
</dd>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>category</code> -
<code>category</code>的类别。
</dd>
<dd>
<code>filter</code> - 将调用其
<code>filter</code>方法的
<code>ServiceRegistry.Filter</code>的实例。
</dd>
<dd>
<code>useOrdering</code> -
<code>true</code>如果在订购返回的对象时应考虑成对订购。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
一个
<code>Iterator</code>给定类别的服务提供者对象的
<code>Iterator</code> ,可能是顺序的。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果没有类别对应
<code>category</code>
</dd>
</dl> </li>
</ul> <a name="getServiceProviderByClass-java.lang.Class-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getServiceProviderByClass</h4> <pre>public &lt;T&gt; T getServiceProviderByClass(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; providerClass)</pre>
<div class="block">
<span>返回给定类类型的当前注册的服务提供者对象。</span>
<span>给定类别的最多一个对象允许在任何给定时间被注册。</span>
<span>如果没有注册对象具有所需的类类型,则返回<code>null</code></span>
</div>
<dl>
<dt>
<span class="paramLabel">参数类型</span>
</dt>
<dd>
<code>T</code> - 提供者的类型。
</dd>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>providerClass</code> - 所需服务提供商对象的
<code></code>
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
目前已注册的服务提供者对象具有所需的
<code></code>类型,或者是
<code>null</code>是不存在的。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果
<code>providerClass</code>
<code>null</code>
</dd>
</dl> </li>
</ul> <a name="setOrdering-java.lang.Class-java.lang.Object-java.lang.Object-">
<!-- --> </a><a name="setOrdering-java.lang.Class-T-T-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>setOrdering</h4> <pre>public &lt;T&gt; boolean setOrdering(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; category,
T firstProvider,
T secondProvider)</pre>
<div class="block">
<span>在给定类别中的两个服务提供者对象之间设置成对排序。</span>
<span>如果一个或两个对象当前未在给定类别中注册,或者如果所需的顺序已经设置,则不会发生任何反应,并返回<code>false</code></span>
<span>如果提供商之前已经按相反的方向进行订购,那么该订单将被删除。</span>
<p> <span>当他们的<code>useOrdering</code>参数为<code>true</code>时, <code>getServiceProviders</code>方法将使用排序。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数类型</span>
</dt>
<dd>
<code>T</code> - 类别的类型。
</dd>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>category</code> - 一个
<code></code>对象,指示要建立偏好的类别。
</dd>
<dd>
<code>firstProvider</code> - 首选提供商。
</dd>
<dd>
<code>secondProvider</code> -提供到
<code>firstProvider</code>是优选的。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
<code>true</code>如果先前未设定的顺序建立。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果任一提供者是
<code>null</code>或它们是相同的对象。
</dd>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果没有类别对应
<code>category</code>
</dd>
</dl> </li>
</ul> <a name="unsetOrdering-java.lang.Class-java.lang.Object-java.lang.Object-">
<!-- --> </a><a name="unsetOrdering-java.lang.Class-T-T-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>unsetOrdering</h4> <pre>public &lt;T&gt; boolean unsetOrdering(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; category,
T firstProvider,
T secondProvider)</pre>
<div class="block">
<span>在给定类别中的两个服务提供者对象之间设置成对排序。</span>
<span>如果一个或两个对象当前没有在给定类别中注册,或者如果它们之间没有设置任何顺序,则不会发生任何反应,并返回<code>false</code></span>
<p> <span>当他们的<code>useOrdering</code>参数为<code>true</code>时, <code>getServiceProviders</code>方法将使用排序。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数类型</span>
</dt>
<dd>
<code>T</code> - 类别的类型。
</dd>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>category</code> - 一个
<code></code>对象,指示优先级将被拆除的类别。
</dd>
<dd>
<code>firstProvider</code> - 以前的首选提供商。
</dd>
<dd>
<code>secondProvider</code> -提供到
<code>firstProvider</code>以前优选的。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
<code>true</code>如果先前设定的订单已经解散。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果任一提供者是
<code>null</code>或它们是相同的对象。
</dd>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果没有类别对应
<code>category</code>
</dd>
</dl> </li>
</ul> <a name="deregisterAll-java.lang.Class-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>deregisterAll</h4> <pre>public void deregisterAll(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;?&gt; category)</pre>
<div class="block">
取消注册目前在给定类别下注册的所有服务提供商对象。
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>category</code> - 要清空的类别。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果没有类别对应
<code>category</code>
</dd>
</dl> </li>
</ul> <a name="deregisterAll--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>deregisterAll</h4> <pre>public void deregisterAll()</pre>
<div class="block">
取消注册所有类别的所有当前注册服务提供商。
</div> </li>
</ul> <a name="finalize--">
<!-- --> </a>
<ul class="blockListLast">
<li class="blockList"> <h4>finalize</h4> <pre>public void finalize()
throws <a href="../../../java/lang/Throwable.html" title="class in java.lang">Throwable</a></pre>
<div class="block">
<span>在垃圾收集之前完成此对象。</span>
<span><code>deregisterAll</code>方法被要求取消注册所有当前注册的服务提供商。</span>
<span>不应该从应用程序代码调用此方法。</span>
</div>
<dl>
<dt>
<span class="overrideSpecifyLabel">重写:</span>
</dt>
<dd>
<code><a href="../../../java/lang/Object.html#finalize--">finalize</a></code>
<code><a href="../../../java/lang/Object.html" title="class in java.lang">Object</a></code>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/Throwable.html" title="class in java.lang">Throwable</a></code> - 如果超类最终化期间发生错误。
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../java/lang/ref/WeakReference.html" title="class in java.lang.ref"><code>WeakReference</code></a>,
<a href="../../../java/lang/ref/PhantomReference.html" title="class in java.lang.ref"><code>PhantomReference</code></a>
</dd>
</dl> </li>
</ul> </li>
</ul> </li>
</ul>
</div>
</div>