3

假设我的BookAPI 包中有一个接口,BookImpl我的实现包中有一些实现。通常,对于单例,我会使用服务注册表来获取我的实现。但是,对于Book,我想在每次获得实现时创建一个新实例。

在 OSGi 中执行此操作的正常模式是什么?

我是否可以使用从服务注册表中获取并用于创建图书实例BookCreator的方法提供服务?createBook

4

2 回答 2

4

这是一个不错的选择,是的。您还可以考虑其中一种服务注入框架,例如声明式服务或蓝图。蓝图允许您指定原型范围,以便“书”的每个使用者都有自己的实例,该实例可能足够独特,也可能不足以帮助您的用例。(DS也有类似的东西。)

但是,即使是同一个消费者实例也需要获取多个“Book”并且您使用工厂,使用这些框架之一将使您的服务访问更加健壮。

于 2012-07-29T02:32:56.680 回答
3

在两年前对这个问题进行了长时间的思考之后,我发现提出的解决方案,作为工厂的服务,是最好的解决方案。原因是相关的类型安全。声明式服务确实具有内置的组件工厂的可能性,它允许您创建组件实例,它的使用不像类型安全工厂那么容易。我还考虑将这个概念放入框架中,但也缺乏简单的工厂服务。

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

于 2012-07-30T06:28:01.717 回答