0

我正在寻找一种简单的方法来控制声明性服务的实例化。

我想要的是一个类似于工厂的东西,它被要求返回一个组件的实例,但我可以在其中控制实例化。

目前,我刚刚找到了可以使用给定字典调用 newInstance 的 ComponentFactory。但我真正想要的是这样的,假设 IComponent 是声明式服务接口,而 MyComponent 是实现类

public class MyComponentFactory implements ? {

   public IComponent newInstance() {
       return new MyComponent("firstParameter", "secondParameter");
   }
}

声明式服务是否有可能发生这样的事情,还是我需要在捆绑激活码中使用我自己的服务注册?

提前致谢

4

2 回答 2

4

DS 不提供您正在寻找的实例创建间接级别。DS 将始终使用公共无参数构造函数,然后调用指定的激活器方法来完成实例初始化。

于 2013-09-20T10:58:38.597 回答
0

这种服务实例化控制的一种替代方法是使用 DS 和 CM 的组合。

您必须在 DS xml 中设置 configuration-policy="require" 并使用 CM 创建一个配置实例,该实例将用于将包含您需要的所有属性(当然只有 DS 支持的类型)的 Dictionary 传递给创建的服务实例. 您甚至可以为该配置使用属性文件和 Felix 文件安装。

如果这还不够,您还有另一种选择,即在使用 CM 添加配置后跟踪新创建的服务并调用 setup(args) 方法。

于 2013-09-21T23:38:49.197 回答