2012-07-29 58 views
3

假设我在我的API包中有一个接口Book,并且在我的实现包中有一些实现BookImpl。通常,对于单身人士,我会使用服务注册表来获得我的实施。但是,对于Book,我希望每次获得实现时都创建一个新实例。OSGi - 获取接口的实现

在OSGi中这样做的正常模式是什么?

我有服务BookCreator与方法createBook,我从服务注册表中获取并用于创建我的书籍实例吗?

回答

3

2年前,我经过了漫长而艰苦的思考,发现提议的解决方案作为一个工厂来运作是最好的解决方案。原因是相关的类型安全。声明式服务确实有内置的可能性,使用组件工厂可以创建组件实例,它的使用并不像安全工厂那么容易。我也考虑将这个概念放在框架中,但也缺乏简单的工厂服务。

所以,是的,你的想法是我所知道的最好的解决方案。

4

这是一个很好的选择,是的。你也可以考虑一个服务注入框架,比如说明性服务或者蓝图。 Blueprint允许你指定一个原型范围,这样'Book'的每个消费者都可以获得自己的实例,这个实例可能有或没有足够的独特性来帮助你的用例。 (DS有类似的东西)。

但是,即使同一个消费者实例需要获得多个Book,并且您使用了工厂,但使用其中一个框架将使您的服务访问更加健壮。

+0

我认为你在DS中讨论的工具是ServiceFactory,它可以通过'servicefactory = true'来启用。这不是海报所要求的,因为它只是给每个消费者捆绑一个新的服务实例,但它不会给消费者明确的程序控制实例的数量 - 即它不提供消费者可以致电的“创造”方法。 – 2012-07-29 08:26:09