有人可以告诉我OSGI中组件工厂和服务工厂之间的区别吗?我在Google上搜索了很多,但找不到服务工厂和组件工厂之间区别的明确解释。
最佳答案
tl;dr:您几乎肯定不想使用 ComponentFactory,因此我建议忽略它。
在解释服务工厂之前,重要的是要了解 OSGi 中的大多数服务在概念上都是单例。当您注册服务时,您将单个 Java 对象放入注册表中,并且该对象必须实现它所注册的接口(interface)。当客户端查找您的服务(使用其接口(interface))时,他们都会得到相同的对象。
使用服务工厂,您可以注册一个工厂来创建实现接口(interface)的对象。 OSGi 使用此工厂为每个消费包创建一个新实例。这很有用,因为您现在可以为每个消费包提供一个稍微不同的对象。例如,如果您正在实现日志记录服务,则使用服务工厂可以让您跟踪哪个包正在调用日志。
但是,服务工厂对于消费者来说是完全透明的。它只是以正常方式使用该服务。这很好,但有时消费者需要编程控制,即消费者准确决定何时应创建服务对象以及何时应销毁它。服务工厂不提供此功能。
组件工厂是提供这种编程控制的早期尝试。我认为它们已经过时了。它们不容易使用,因为您必须将提供者和消费者都耦合到声明式服务 API。
现在您应该使用 OSGi 第 6 版中引入的原型(prototype)范围服务。我在博客中介绍了这些 here
关于java - OSGI中服务因子与组件工厂之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33505593/