首页 文章

OSGi - 获取接口的实现

提问于
浏览
3

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

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

我是否有一个服务 BookCreator 使用方法 createBook ,我从服务注册表获取并用于创建我的图书实例?

2 回答

  • 4

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

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

  • 3

    这是一个不错的选择,是的 . 您还可以考虑其中一个服务注入框架,例如声明性服务或蓝图 . Blueprint允许您指定原型范围,以便'Book'的每个使用者获得自己的实例,这可能是也可能不是唯一足以帮助您的用例的实例 . (DS有类似的东西 . )

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

相关问题