控制osgi声明性服务的实例化

时间:2013-09-20 07:08:20

标签: java osgi factory declarative-services

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

我想要的是像工厂一样被要求返回组件的实例,但我可以控制实例化。

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

public class MyComponentFactory implements ? {

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

声明式服务是否有类似的可能,或者我是否需要在捆绑激活码中使用我自己的服务注册?

提前致谢

2 个答案:

答案 0 :(得分:4)

DS没有提供您正在寻找的实例创建间接级别。 DS将始终使用public no-args构造函数,然后调用指定的activator方法来完成实例初始化。

答案 1 :(得分:0)

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

您必须在DS xml中设置configuration-policy =“require”并使用CM创建一个配置实例,该实例将用于传递包含您需要的所有属性的字典(当然只有DS支持的类型)到创建了服务实例。您甚至可以使用属性文件和Felix File Install进行配置。

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