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