使用 Helper 的方法提供单个工厂

From Apache OpenOffice Wiki
Jump to: navigation, search


组件必须能够为它包含的每个服务实现创建单个工厂,并在静态组件操作 __getServiceFactory() 中返回这些工厂。OpenOffice.org Java UNO 环境提供了一个 Java 类 com.sun.star.comp.loader.FactoryHelper,它可以通过其方法 getServiceFactory() 创建单个工厂的默认实现。可以编写以下示例:

  package org.openoffice.comp.test;
 
  import com.sun.star.lang.XSingleServiceFactory;
  import com.sun.star.lang.XMultiServiceFactory;
  import com.sun.star.registry.XRegistryKey;
  import com.sun.star.comp.loader.FactoryHelper;
 
  public class ImageShrink ... {
 
    ...
 
      // static __getServiceFactory() implementation
      // static member __serviceName was introduced above for XServiceInfo implementation 
      public static XSingleServiceFactory __getServiceFactory(String implName,
              XMultiServiceFactory multiFactory,
              com.sun.star.registry.XRegistryKey regKey) {
 
          com.sun.star.lang.XSingleServiceFactory xSingleServiceFactory = null;
          if (implName.equals( ImageShrink.class.getName()) )
              xSingleServiceFactory = FactoryHelper.getServiceFactory(ImageShrink.class, 
              ImageShrink.__serviceName, multiFactory, regKey);
 
          return xSingleServiceFactory;
      }
 
    ...
 
  }


FactoryHelper 包含在 jurt jar 文件中。getServiceFactory() 方法的第一个参数接受一个 Class 对象。当对默认工厂调用 createInstance() 时,它将创建该 Class 的实例,方法是对其使用 newInstance(),并通过 getName() 获取实现名称。第二个参数是服务名称。multiFactoryregKey 参数在 __getServiceFactory() 中接收,并传送到 FactoryHelper


Documentation note.png 在此示例中,默认工厂通过 Class.getName() 找到的实现名称是 org.openoffice.comp.test.ImageShrink,服务名称是 org.openoffice.test.ImageShrink。实现名称和服务名称用于默认工厂中单独的 XServiceInfo 实现。不但要在您的服务实现中支持 XServiceInfo 接口,而且单个工厂也必须实现此接口。


FactoryHelper 创建的默认工厂需要使用服务的实现类中的公共构造函数,并在实例化服务实现时调用它。构造函数可以是默认的构造函数,也可以将 com.sun.star.uno.XComponentContextcom.sun.star.lang.XMultiServiceFactory 作为参数。如果需要其他可能的参数的更多信息,请参阅 编写 UNO 组件 - Java 中的简单组件 - 使用参数创建实例


Java 组件保存在 jar 文件中。组件注册之后,注册表中将包含 jar 文件的名称,以便服务管理器可以找到它。但是,因为 jar 文件中可以包含多个类文件,所以必须通知服务管理器哪一个包含了 __getServiceFactory() 方法。该信息必须放入 jar 的标明文件中,例如:

 RegistrationClassName: org.openoffice.comp.test.ImageShrink
Content on this page is licensed under the Public Documentation License (PDL).
Personal tools
In other languages