java - OSGI中服务因子与组件工厂之间的区别

标签 java osgi

有人可以告诉我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/

相关文章:

java - Tomcat 7 Liferay 6.2 关于损坏数据库的奇怪错误

java - Springboot UnsatisfiedDependencyException?

java - POI - 无法在 osgi 中打开 xlsx 文件

java - 如何从 Java 访问外部 Jar 中的资源/配置/文本文件?

java - Eclipse:在Linux下启动自定义eclipse应用程序会立即返回命令行提示符

java - 在 UI 元素上使用 OSGi DS 是一个好习惯吗?

java - 使用 split 对输入进行标记

Java 可选 : map to subclass or else super class

ISA Server 2006 的 Java HttpSession 问题

java - 查找使用通配符属性注册的 OSGI 服务