-
- All Known Subinterfaces:
-
DirObjectFactory
public interface ObjectFactory
此接口表示用于创建对象的工厂。JNDI框架允许通过对象工厂动态加载对象实现。 例如,当查找名称空间中绑定的打印机时,如果打印服务将打印机名称绑定到引用,则打印机参考可用于创建打印机对象,以便查找的调用者可以在打印机对象之后直接操作查找。
一个
ObjectFactory
负责创建一个特定类型的对象。 在上面的例子中,您可能有一个PrinterObjectFactory来创建打印机对象。对象工厂必须实现
ObjectFactory
界面。 此外,工厂类必须是公共的,并且必须有一个不接受参数的公共构造函数。 请注意,如果工厂位于命名模块中,则该模块必须位于由该模块导出到java.naming
模块的java.naming
。对象工厂的
getObjectInstance()
方法可以被多次调用,可能使用不同的参数。 实现是线程安全的。该类文档中提及的URL是指RFC 1738及其相关RFC定义的URL字符串。 它是符合其中描述的语法的任何字符串,并且可能不总是在java.net.URL类或Web浏览器中具有相应的支持。
-
-
方法详细信息
-
getObjectInstance
Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment) throws 异常
使用指定的位置或引用信息创建对象。该对象的特殊要求使用
environment
提供。 这样的环境属性的示例是用户身份信息。NamingManager.getObjectInstance()
连续加载对象工厂,并在它们之间调用此方法,直到产生非空答案。 当对象工厂引发异常时,异常传递给NamingManager.getObjectInstance()
的调用者(并且不会对可能产生非空答案的其他工厂进行搜索)。 如果对象工厂确定它是唯一的预定工厂,并且没有其他对象工厂应该被尝试,那么对象工厂应该只抛出异常。 如果此工厂无法使用提供的参数创建对象,则应返回null。URL上下文工厂是一个特殊的ObjectFactory,它创建用于解析URL或由URL指定位置的对象的上下文。 URL上下文工厂的
getObjectInstance()
方法将遵循以下规则。- 如果
obj
为null,请创建一个上下文来解析与此工厂关联的方案的URL。 所得到的上下文不与特定URL绑定:它可以使用此工厂的方案ID来处理任意URL。 例如,在LDAP URL上下文工厂上调用getObjectInstance()
设置为null的obj
将返回一个可以解析LDAP URL的上下文,例如“ldap://ldap.wiz.com/o=wiz,c=us”和“ldap: //ldap.umich.edu/o=umich,c=us”。 - 如果
obj
是URL字符串,则创建由URL标识的对象(通常为上下文)。 例如,假设这是LDAP URL上下文工厂。 如果obj
是“ldap://ldap.wiz.com/o=wiz,c=us”,则getObjectInstance()将返回由LDAP服务器ldap上的可分辨名称“o = wiz,c = us”命名的上下文。 wiz.com。 然后,该上下文可用于解析相对于该上下文的LDAP名称(例如“cn = George”)。 - 如果
obj
是一个URL字符串数组,那么这个假设是这些URL在它们引用的上下文中是等价的。 验证URL是否需要等同于上下文工厂。 数组中URL的顺序不重要。 getObjectInstance()返回的对象与单个URL的情况类似。 它是由URL命名的对象。 - 如果
obj
是任何其他类型,getObjectInstance()
的行为由上下文工厂实现确定。
name
和environment
参数由呼叫者拥有。 尽管它可能会保留对克隆或副本的引用,但实现不会修改这些对象或保留对它们的引用。名称和上下文参数。
name
和nameCtx
参数可以可选地用于指定正在创建的对象的名称。name
是对象的名称,相对于上下文nameCtx
。 如果有几个可能的对象可以被命名的上下文(通常是这样),则由调用者来选择一个。 一个很好的经验法则是选择“最深”的上下文。 如果nameCtx
为空,则name
是相对于默认的初始上下文。 如果未指定名称,则name
参数应为空。 如果工厂使用nameCtx
它应该将其使用与并发访问同步,因为上下文实现不能保证是线程安全的。- 参数
-
obj
- 可能包含可用于创建对象的位置或引用信息的空对象。 -
name
- 此对象相对于nameCtx
的名称,如果未指定名称,则为null。 -
nameCtx
- 指定了name
参数的上下文,如果name
相对于默认初始上下文,name
null。 -
environment
- 用于创建对象的可能的空环境。 - 结果
- 创建对象 如果无法创建对象,则为null。
- 异常
-
异常
- 如果此对象工厂在尝试创建对象时遇到异常,并且不会尝试其他对象工厂。 - 另请参见:
-
NamingManager.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>)
,NamingManager.getURLContext(java.lang.String, java.util.Hashtable<?, ?>)
- 如果
-
-