uTools-Manuals/docs/java/javax/naming/spi/ObjectFactory.html

149 lines
11 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">
compact3
</div>
<div class="subTitle">
javax.naming.spi
</div>
<h2 class="title" title="Interface ObjectFactory">Interface ObjectFactory</h2>
</div><div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>
All Known Subinterfaces:
</dt>
<dd>
<span><a href="../../../javax/naming/spi/DirObjectFactory.html" title="javax.naming.spi中的接口">DirObjectFactory</a></span>
</dd>
</dl>
<hr/> <br/> <pre>public interface <span class="typeNameLabel">ObjectFactory</span></pre>
<div class="block">
<span>此接口表示用于创建对象的工厂。</span>
<p> <span>JNDI框架允许通过<em>对象工厂动态</em>加载<em>对象实现</em></span> <span>例如,当查找名称空间中绑定的打印机时,如果打印服务将打印机名称绑定到引用,则打印机参考可用于创建打印机对象,以便查找的调用者可以在打印机对象之后直接操作查找。</span> </p>
<p> <span>一个<tt>ObjectFactory</tt>负责创建特定类型的对象。</span> <span>在上面的例子中您可能有一个PrinterObjectFactory来创建打印机对象。</span> </p>
<p> <span>对象工厂必须实现<tt>ObjectFactory</tt>界面。</span> <span>此外,工厂类必须是公共的,并且必须有一个不接受参数的公共构造函数。</span> </p>
<p> <span>对象工厂的<tt>getObjectInstance()</tt>方法可以被多次调用,可能使用不同的参数。</span> <span>实现是线程安全的。</span> </p>
<p> <span>该类文档中提及的URL是指RFC 1738及其相关RFC定义的URL字符串。</span> <span>它是符合其中描述的语法的任何字符串并且可能不总是在java.net.URL类或Web浏览器中具有相应的支持。</span> </p>
</div>
<dl>
<dt>
<span class="simpleTagLabel">从以下版本开始:</span>
</dt>
<dd>
1.3
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../javax/naming/spi/NamingManager.html#getObjectInstance-java.lang.Object-javax.naming.Name-javax.naming.Context-java.util.Hashtable-"><code>NamingManager.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable&lt;?, ?&gt;)</code></a> <a href="../../../javax/naming/spi/NamingManager.html#getURLContext-java.lang.String-java.util.Hashtable-"><code>NamingManager.getURLContext(java.lang.String, java.util.Hashtable&lt;?, ?&gt;)</code></a> <a href="../../../javax/naming/spi/ObjectFactoryBuilder.html" title="javax.naming.spi中的接口"><code>ObjectFactoryBuilder</code></a> <a href="../../../javax/naming/spi/StateFactory.html" title="javax.naming.spi中的接口"><code>StateFactory</code></a></span>
</dd>
</dl> </li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== 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="t2"><span><a href="javascript:show(2);">接口方法</a></span><span class="tabEnd"> </span></span>
<span class="tableTab" id="t3"><span><a href="javascript:show(4);">抽象方法</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><a href="../../../java/lang/Object.html" title="class in java.lang">Object</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/naming/spi/ObjectFactory.html#getObjectInstance-java.lang.Object-javax.naming.Name-javax.naming.Context-java.util.Hashtable-">getObjectInstance</a></span>(<a href="../../../java/lang/Object.html" title="class in java.lang">Object</a> obj, <a href="../../../javax/naming/Name.html" title="interface in javax.naming">Name</a> name, <a href="../../../javax/naming/Context.html" title="interface in javax.naming">Context</a> nameCtx, <a href="../../../java/util/Hashtable.html" title="class in java.util">Hashtable</a>&lt;?,?&gt; environment)</code>
<div class="block">
使用指定的位置或引用信息创建对象。
</div> </td>
</tr>
</tbody>
</table> </li>
</ul> </li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- --> </a> <h3>方法详细信息</h3> <a name="getObjectInstance-java.lang.Object-javax.naming.Name-javax.naming.Context-java.util.Hashtable-">
<!-- --> </a>
<ul class="blockListLast">
<li class="blockList"> <h4>getObjectInstance</h4> <pre><a href="../../../java/lang/Object.html" title="class in java.lang">Object</a> getObjectInstance(<a href="../../../java/lang/Object.html" title="class in java.lang">Object</a> obj,
<a href="../../../javax/naming/Name.html" title="interface in javax.naming">Name</a> name,
<a href="../../../javax/naming/Context.html" title="interface in javax.naming">Context</a> nameCtx,
<a href="../../../java/util/Hashtable.html" title="class in java.util">Hashtable</a>&lt;?,?&gt; environment)
throws <a href="../../../java/lang/Exception.html" title="class in java.lang">异常</a></pre>
<div class="block">
<span>使用指定的位置或引用信息创建对象。</span>
<p> <span>使用<code>environment</code>提供此对象的特殊<code>environment</code></span> <span>这样的环境属性的示例是用户身份信息。</span> </p>
<p> <span><tt>NamingManager.getObjectInstance()</tt>依次加载对象工厂,并在其上调用此方法,直到产生非空答案。</span> <span>当对象工厂抛出异常时,异常传递给<tt>NamingManager.getObjectInstance()</tt>的调用者(并且不会对可能产生非空答案的其他工厂进行搜索)。</span> <span>如果对象工厂确定它是唯一的预定工厂,并且没有其他对象工厂应该被尝试,那么对象工厂应该只抛出异常。</span> <span>如果此工厂无法使用提供的参数创建对象则应返回null。</span> </p>
<p> <span><em>URL上下文工厂</em>是一个特殊的ObjectFactory它创建用于解析URL或由URL指定位置的对象的上下文。</span> <span>URL上下文工厂的<tt>getObjectInstance()</tt>方法将遵循以下规则。</span> </p>
<ol>
<li> <span>如果<code>obj</code>为空则创建一个上下文来解析与此工厂关联的方案的URL。</span> <span>所得到的上下文不与特定URL绑定它可以使用此工厂的方案ID来处理任意URL。</span> <span>例如在LDAP URL上下文工厂上调用<tt>obj</tt>设置为null的<code>obj</code>将返回一个可以解析LDAP URL的上下文例如“ldap//ldap.wiz.com/o=wiz,c=us”和“ldap //ldap.umich.edu/o=umich,c=us“。</span> </li>
<li> <span>如果<code>obj</code>是URL字符串则创建由URL标识的对象通常为上下文</span> <span>例如假设这是LDAP URL上下文工厂。</span> <span>如果<code>obj</code>是“ldap//ldap.wiz.com/o=wiz,c=us”则getObjectInstance将返回由LDAP服务器ldap上的可分辨名称“o = wizc = us”命名的上下文。 wiz.com。</span> <span>然后该上下文可用于解析相对于该上下文的LDAP名称例如“cn = George”</span> </li>
<li> <span>如果<code>obj</code>是一个URL字符串数组那么这个假设是这些URL在它们引用的上下文中是等价的。</span> <span>验证URL是否需要等同于上下文工厂。</span> <span>数组中URL的顺序不重要。</span> <span>getObjectInstance返回的对象与单个URL的情况类似。</span> <span>它是由URL命名的对象。</span> </li>
<li> <span>如果<code>obj</code>是任何其他类型, <tt>getObjectInstance()</tt>的行为由上下文工厂实现确定。</span> </li>
</ol>
<p> <span><tt>name</tt><tt>environment</tt>参数由呼叫者拥有。</span> <span>尽管它可能会保留对克隆或副本的引用,但实现不会修改这些对象或保留对它们的引用。</span> </p>
<p> <span><b>名称和上下文参数。</b></span> <span><a name="NAMECTX"></a> <code>name</code><code>nameCtx</code>参数可以可选地用于指定正在创建的对象的名称。</span> <span><code>name</code>是对象的名称,相对于上下文<code>nameCtx</code></span> <span>如果有几个可能的对象可以被命名的上下文(通常是这样),则由调用者来选择一个。</span> <span>一个很好的经验法则是选择“最深”的上下文。</span> <span>如果<code>nameCtx</code>为空,则<code>name</code>是相对于默认的初始上下文。</span> <span>如果没有指定名称,那么<code>name</code>参数应该为空。</span> <span>如果工厂使用<code>nameCtx</code>它应该将其使用与并发访问同步,因为上下文实现不能保证是线程安全的。</span> </p>
<p></p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>obj</code> - 可能包含可用于创建对象的位置或引用信息的空对象。
</dd>
<dd>
<code>name</code> - 此对象相对于
<code>nameCtx</code>的名称如果未指定名称则为null。
</dd>
<dd>
<code>nameCtx</code> - 指定
<code>name</code>参数的上下文,如果
<code>name</code>相对于默认初始上下文则为null。
</dd>
<dd>
<code>environment</code> - 用于创建对象的可能的空环境。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
<span>创建对象</span>
<span>如果无法创建对象则为null。</span>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/Exception.html" title="class in java.lang">异常</a></code> - 如果此对象工厂在尝试创建对象时遇到异常,并且不会尝试其他对象工厂。
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../javax/naming/spi/NamingManager.html#getObjectInstance-java.lang.Object-javax.naming.Name-javax.naming.Context-java.util.Hashtable-"><code>NamingManager.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable&lt;?, ?&gt;)</code></a>,
<a href="../../../javax/naming/spi/NamingManager.html#getURLContext-java.lang.String-java.util.Hashtable-"><code>NamingManager.getURLContext(java.lang.String, java.util.Hashtable&lt;?, ?&gt;)</code></a>
</dd>
</dl> </li>
</ul> </li>
</ul> </li>
</ul>
</div>
</div>