有人可以告诉我 OSGI 中组件工厂和服务工厂之间的区别。我在谷歌搜索了很多但是找不到服务工厂和组件工厂之间差异的明确解释。
答案 0 :(得分:3)
tl; dr:你几乎肯定不想使用ComponentFactory,所以我建议你忽略它。
在我解释服务工厂之前,了解OSGi中的大多数服务是概念上的单例非常重要。注册服务时,将一个Java对象放入注册表中,该对象必须实现已注册的接口。当客户端查找您的服务(使用其界面)时,它们都会获得相同的对象。
使用服务工厂,您可以注册一个工厂来创建实现该接口的对象。 OSGi使用此工厂为每个消费包创建一个新实例 。这很有用,因为您现在可以为每个消费包提供稍微不同的对象。例如,如果您正在实施日志记录服务,则使用服务工厂可以跟踪正在调用日志的捆绑包。
但是,服务工厂对消费者完全透明。它只是以正常方式使用服务。这很好,但有时消费者需要程序控制,即消费者确切地决定何时应该创建服务对象以及何时应该销毁它。这不适用于服务工厂。
组件工厂是提供此程序控制的早期尝试。我认为它们已经过时了。它们不容易使用,因为您必须将提供者和使用者都联系到Declarative Services API。
现在你应该使用OSGi第6版中引入的原型范围服务。我在博客上写了here