public interface DirObjectFactory
此接口表示一个工厂,该工厂用来在给定某一对象以及有关该对象的属性的情况下创建该对象。
JNDI 框架允许通过对象工厂 动态加载对象实现。有关详细信息,请参见 ObjectFactory。
DirObjectFactory 扩展了 ObjectFactory,它允许将 Attributes 实例提供给 getObjectInstance() 方法。DirObjectFactory 实现将由 DirContext 服务提供者使用。除了从目录中读取对象之外,该服务提供者还可能已经拥有对该对象工厂有用的属性,以检查该工厂是否应该处理对象。例如,LDAP 风格的服务提供者可能已经读取对象的“对象类 (objectclass)”。CORBA 对象工厂可能只对具有 "objectclass=corbaObject" 的 LDAP 项感兴趣。通过使用 LDAP 服务提供者所提供的属性,CORBA 对象工厂可以快速排除不需要关注的对象,而非 CORBA 对象工厂可以快速排除与 CORBA 有关的 LDAP 项。
NamingManager.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable
)
,
DirectoryManager.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable
, javax.naming.directory.Attributes)
,
ObjectFactory
方法摘要 | |
---|---|
Object |
getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment, Attributes attrs) 使用位置或引用信息以及指定的属性创建一个对象。 |
从接口 javax.naming.spi.ObjectFactory 继承的方法 |
---|
getObjectInstance |
方法详细信息 |
---|
Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment, Attributes attrs) throws Exception
使用 environment
提供此对象的特殊需要。这种 environment 属性的一个示例是用户身份信息。
DirectoryManager.getObjectInstance() 接连在对象工厂中进行加载。如果遇到 DirObjectFactory,它将调用 DirObjectFactory.getObjectInstance();否则它将调用 ObjectFactory.getObjectInstance()。它将持续这样做,直到某一工厂产生非 null 应答。
当对象工厂抛出异常时,该异常被传递给 DirectoryManager.getObjectInstance() 的调用者。停止搜索可能产生非 null 应答的其他工厂。对象工厂只有在可以确定它是唯一需要的工厂并且不应该再尝试其他对象工厂时才抛出异常。如果此对象工厂无法使用所提供的参数创建对象,则它应该返回 null。
因为 DirObjectFactory 扩展了 ObjectFactory,所以它实际上有两个 getObjectInstance() 方法,其中一个方法在属性参数上不同于另一个方法。给出一个实现 DirObjectFactory 的工厂,DirectoryManager.getObjectInstance() 将只使用接受属性参数的方法,而 NamingManager.getObjectInstance() 将只使用不接收属性参数的方法。
有关 URL 上下文工厂和对象工厂其他属性的描述,请参阅 ObjectFactory,它同样适用于 DirObjectFactory。
name、attrs 和 environment 参数都归调用者所有。该实现不会修改这些对象或保存对它们的引用,尽管它可能保存对这些对象的副本的引用。
obj
- 包含可在创建对象时使用的位置或引用信息的对象(可能为 null)。
name
- 此对象相对于
nameCtx
的名称,如果没有指定名称,则该参数为 null。
nameCtx
- 一个上下文,
name
参数是相对于该上下文指定的,如果
name
相对于默认初始上下文,则该参数为 null。
environment
- 创建对象时使用的环境(可能为 null)。
attrs
- 包含
obj 的某些属性的属性(可能为 null)。
attrs 不一定拥有
obj 的所有属性。如果对象工厂需要更多的属性,则需要使用
obj 或者
name 和
nameCtx 获取。该工厂不得修改 attrs。
Exception
- 如果此对象工厂在试图创建对象时遇到异常,并且不再尝试其他对象工厂。
DirectoryManager.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable
, javax.naming.directory.Attributes)
,
NamingManager.getURLContext(java.lang.String, java.util.Hashtable
)