OSGi组件和服务之间有什么区别

时间:2012-01-16 21:22:16

标签: osgi

在OSGi下,组件与服务之间的主要区别是什么? 据我了解,所有服务必须是组件,但并非所有组件都必须是服务。

使用样本用例有什么好处?

2 个答案:

答案 0 :(得分:54)

“组件”的定义不如服务。

服务是在OSGi服务注册表中注册的任何对象,可以使用其接口名称进行查找。唯一的先决条件是服务应该实现一些接口......任何接口。例如,我可以在java.lang.Runnable接口下注册一个可运行的对象,客户端可以使用该接口名称查找它。

“组件”往往是一个对象,其生命周期通常由声明服务(DS),蓝图或iPOJO等组件框架进行管理。有关可用的不同组件框架的讨论,请参阅OSGi社区Wiki上的this page

组件可以组合使用或单独使用以下任何功能:

  • 组件可能已启动已停止;这将被视为一个“活跃”的组成部分,尽管这也是一个非正式术语。不需要启动或停止的组件称为被动组件。
  • 组件可以发布本身作为OSGi服务。
  • 组件可能绑定到使用 OSGi服务。

通常,使用组件框架是使用OSGi服务的最简单方法,因为框架将管理对您要使用的服务的绑定。例如,您可以说您的组件“依赖于”特定服务,在这种情况下,只有在该服务可用时才会创建和激活组件 - 并且当服务不可用时它也将被销毁。

答案 1 :(得分:7)

编辑:请参阅Neil Bartlett的回答,我已经非常具体地回答了声明服务,但它比我在这里错误陈述的更加微妙。

简而言之:组件是服务的消费者而不是提供者,服务是组件registring作为服务提供者的扩展。

组件具有生命周期(de / activate和modify),服务依赖关系管理(un / bind)。

服务是组件的扩展;通过服务注册表,它通过发布已实现的接口和属性为其他捆绑包提供服务。

服务的用例很明显,使用组件的典型情况是需要管理生命周期,配置或服务依赖性,但不需要/想要发布组件以进行跨包使用。

相关问题