Module java.naming
Package javax.naming.spi

Interface ObjectFactory

已知的所有子接口:
DirObjectFactory

public interface ObjectFactory
该接口表示用于创建对象的工厂。

JNDI框架允许通过对象工厂动态加载对象实现。例如,在查找绑定在命名空间中的打印机时,如果打印服务将打印机名称绑定到引用,则可以使用打印机引用来创建打印机对象,以便查找后调用者可以直接操作打印机对象。

ObjectFactory负责创建特定类型的对象。在上面的示例中,您可能有一个用于创建打印机对象的PrinterObjectFactory。

对象工厂必须实现ObjectFactory接口。此外,工厂类必须是public的,并且必须有一个不接受参数的public构造函数。请注意,在工厂位于命名模块的情况下,它必须位于由该模块向java.naming模块导出的包中。

对象工厂的getObjectInstance()方法可能会被多次调用,可能使用不同的参数。实现是线程安全的。

在此类文档中提到的URL指的是RFC 1738及其相关RFC定义的URL字符串。它是符合其中描述的语法的任何字符串,并且可能并非始终在java.net.URL类或Web浏览器中具有相应的支持。

自:
1.3
参见:
  • Method Summary

    Modifier and Type
    Method
    Description
    getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment)
    使用指定的位置或引用信息创建对象。
  • 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()方法将遵循以下规则。

      1. 如果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")的上下文。
      2. 如果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")。
      3. 如果obj是URL字符串数组,则假定这些URL在其引用的上下文方面是等效的。验证URL是否等效或需要等效由上下文工厂负责。数组中URL的顺序不重要。getObjectInstance()返回的对象与单个URL情况相同。它是由URL命名的对象。
      4. 如果obj是其他类型,则getObjectInstance()的行为由上下文工厂实现确定。

      nameenvironment参数由调用者拥有。实现不会修改这些对象或保留对它们的引用,尽管它可能保留对克隆或副本的引用。

      名称和上下文参数。     namenameCtx参数可以选择用于指定正在创建的对象的名称。 name是对象相对于上下文nameCtx的名称。如果有几个可能的上下文可以命名对象--这通常是情况--则由调用者选择一个。一个好的经验法则是选择最“深”的可用上下文。如果nameCtx为null,则name相对于默认初始上下文。如果未指定名称,则name参数应为null。如果工厂使用nameCtx,则应根据并发访问同步其使用,因为上下文实现不能保证是线程安全的。

      参数:
      obj - 可能为null的对象,包含可用于创建对象的位置或引用信息。
      name - 相对于nameCtx的此对象的名称,如果未指定名称,则为null。
      nameCtx - 指定name参数的上下文,如果name相对于默认初始上下文,则为null。
      environment - 用于创建对象的可能为null的环境。
      返回:
      创建的对象;如果无法创建对象,则为null。
      抛出:
      Exception - 如果此对象工厂在尝试创建对象时遇到异常,并且不打算尝试其他对象工厂。
      参见: