使用 Helper 的方法提供单个工厂
组件必须能够为它包含的每个服务实现创建单个工厂,并在静态组件操作 __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()
获取实现名称。第二个参数是服务名称。multiFactory
和 regKey
参数在 __getServiceFactory()
中接收,并传送到 FactoryHelper
。
![]() |
在此示例中,默认工厂通过 Class.getName() 找到的实现名称是 org.openoffice.comp.test.ImageShrink,服务名称是 org.openoffice.test.ImageShrink。实现名称和服务名称用于默认工厂中单独的 XServiceInfo 实现。不但要在您的服务实现中支持 XServiceInfo 接口,而且单个工厂也必须实现此接口。 |
FactoryHelper
创建的默认工厂需要使用服务的实现类中的公共构造函数,并在实例化服务实现时调用它。构造函数可以是默认的构造函数,也可以将 com.sun.star.uno.XComponentContext 或 com.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). |