假设我的API包中有一个接口Book
,我的实现包中有一些实现BookImpl
。通常,对于单身人士,我会使用服务注册表来实现我的实现。但是,对于Book
,我想在每次实现时创建一个新实例。
在OSGi中执行此操作的正常模式是什么?
我是否有一个服务BookCreator
,其中包含我从服务注册表获取并用于创建我的图书实例的方法createBook
?
答案 0 :(得分:4)
这是一个不错的选择,是的。您还可以考虑其中一个服务注入框架,例如声明性服务或蓝图。 Blueprint允许您指定原型范围,以便'Book'的每个使用者获得自己的实例,这可能是也可能不是唯一足以帮助您的用例的实例。 (DS有类似的东西。)
然而,即使是同一个消费者实例也需要获得多个“Book”并使用工厂,使用其中一个框架将使您的服务访问更加健壮。
答案 1 :(得分:3)
在2年前对这个问题进行了长时间的思考之后,我发现建议的解决方案,即作为工厂的服务,是最好的解决方案。原因是相关的类型安全。声明性服务确实具有组件工厂的内置可能性,允许您创建组件实例,其使用并不像类型安全工厂那么容易。我还考虑将这个概念放在框架中,但也缺乏简单的工厂服务。
是的,你的想法是我所知道的最佳解决方案。