public interface ObjectFactory
JNDI框架允许对象的实现是通过在动态加载对象工厂。例如,当查找绑定在名称空间中的打印机时,如果打印服务将打印机名称绑定到引用时,可以使用打印机引用来创建一个打印机对象,以便查找的调用方可以在查找后直接操作打印机对象。
一个ObjectFactory负责创建特定类型的对象。在上面的例子中,你可能有一个printerobjectfactory创建物体打印机。
一个对象的工厂必须实施ObjectFactory接口。此外,工厂类必须是公共的,必须有一个接受没有参数的公共构造函数。
一个对象的工厂getObjectInstance()方法可能被调用多次,可能使用不同的参数。执行是线程安全的。
URL这一类的文档中提及指的是一个URL字符串由RFC 1738和RFC中定义的相关。这是任何字符串是否符合语法中所描述的,和不可能总是在java.net.url类或Web浏览器都有相应的支持。
Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment) throws 异常
这个对象的特殊要求提供使用environment
。这样的环境属性的一个例子是用户身份信息。
NamingManager.getObjectInstance()先后负载对象工厂和调用该方法,直到一个产生一个非零的答案。当一个异常被抛出的异常对象工厂,是通过对NamingManager.getObjectInstance()调用者(没有搜索了,可能会产生一个非零的回答其他工厂)。一个对象工厂应该只抛出一个例外,如果它是肯定的,它是唯一的工厂,没有其他对象的工厂应该尝试。如果这个工厂不能使用提供的参数创建一个对象,则该对象将返回空值。
一个URL上下文工厂是特殊化,创造了解决它们的位置指定的URL的URL或对象上下文。一个URL上下文工厂的getObjectInstance()方法将遵守以下规则。
obj
是null,创建解决方案与本厂相关的URL上下文。产生的背景是不依赖于一个特定的URL:它能与本厂的方案ID,例如处理任意URL,调用getObjectInstance()与obj
对LDAP URL上下文工厂设置为null将返回一个上下文,可以解决诸如“LDAP LDAP URL:/ / LDAP。奇才。COM / O =奇才,C =美国”和“LDAP:/ / LDAP。密歇根大学。教育/ O=C=美国密歇根大学,”。obj
是URL字符串创建一个对象(通常是一个上下文)的URL。例如,假设这是一个LDAP URL上下文工厂。如果obj
“LDAP:/ / LDAP。奇才。COM / O =天才,C =我们”,getobjectinstance()将上下文的可分辨名称“O =天才命名,C =我们“在LDAP服务器ldap.wiz.com。在此背景下可以用来解决LDAP名称(如“CN =乔治”)相对于上下文。obj
是URL字符串数组,假设URL的语境中所指的当量。验证的网址是否,或需要,相当于是到上下文工厂。数组中的网址的顺序不重要。通过getobjectinstance()返回的对象是单个URL的情况。它是由网址命名的对象。obj
是任何其他类型的getObjectInstance()的行为由上下文工厂实施确定。的name和environment参数是由调用方拥有。该实现将不会修改这些对象或保持引用它们,虽然它可能会保留对克隆或副本的引用。
名称和上下文参数。 的name
和nameCtx
参数可用于指定创建的对象的名称。name
是对象的名字,相对于背景nameCtx
。如果有几个可能的背景下,从该对象可以被命名为--会经常出现这样的情况,它是由调用者来选择一个。一个很好的经验法则是选择“最深”的上下文。如果nameCtx
是空的,name
相对于默认初始上下文。如果没有被指定,这个name
参数应为。如果工厂使用nameCtx
应该同步与并发访问使用,因为语境的实现并不保证是线程安全的。
obj
-可能的空对象包含位置或参考信息,可用于创建对象。
name
-此对象的名称相对
nameCtx
,或null,如果没有指定名称。
nameCtx
的上下文相关的
name
参数指定,或null如果
name
相对于默认初始上下文。
environment
-这是用于创建对象可能的空环境。
异常
-如果这对象工厂在试图创建一个对象时遇到了一个例外,并没有其他的对象工厂进行。
NamingManager.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>)
,
NamingManager.getURLContext(java.lang.String, java.util.Hashtable<?, ?>)
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.