【发布时间】:2013-09-20 07:08:19
【问题描述】:
我正在寻找一种简单的方法来控制声明式服务的实例化。
我想要的是一个类似于工厂的东西,它被要求返回一个组件的实例,但我可以在其中控制实例化。
目前我刚刚找到了可以使用给定字典调用 newInstance 的 ComponentFactory。但我真正想要的是这样的,假设 IComponent 是声明式服务接口,而 MyComponent 是实现类
public class MyComponentFactory implements ? {
public IComponent newInstance() {
return new MyComponent("firstParameter", "secondParameter");
}
}
声明式服务是否有类似的可能,还是我需要在捆绑激活码中使用我自己的服务注册?
提前致谢
【问题讨论】:
-
谁控制实例化?即,谁会打电话给
newInstance?服务消费者?或者您希望框架自动执行此操作;如果是这样,那么在什么时间/事件? -
框架应该在需要服务实例时自动完成。即,服务使用者向 OSGI 服务注册表请求服务“IComponent”。
-
但这就是 DS 已经做到的。它根据服务消费者的第一个需求创建组件。
-
我知道,那是我的问题。框架强制使用 0 参数构造函数。我认为可能有一种解决方法,因此框架说:“我需要一个新组件,我将实例委托给你的特殊类”
-
客户端+字典有什么问题?或者,如果这些参数是静态编码的,为什么不将它们移动到调用参数化构造函数的零参数构造函数?
标签: java osgi factory declarative-services