【发布时间】:2012-02-11 18:33:21
【问题描述】:
在 OSGi 下,组件与服务之间的主要区别是什么? 据我了解,所有服务都必须是组件,但并非所有组件都必须是服务。
在示例用例中使用一个比另一个有什么好处?
【问题讨论】:
标签: osgi
在 OSGi 下,组件与服务之间的主要区别是什么? 据我了解,所有服务都必须是组件,但并非所有组件都必须是服务。
在示例用例中使用一个比另一个有什么好处?
【问题讨论】:
标签: osgi
编辑:请参阅 Neil Bartlett 的回答,我已经非常具体地回答了声明式服务,但它比我在这里错误地陈述的要微妙得多。
简而言之:组件是服务的消费者而不是提供者,服务是注册为服务提供者的组件的扩展。
组件具有生命周期(取消/激活和修改)、服务依赖管理(取消/绑定)。
服务是组件的扩展;通过服务注册中心,它通过发布实现的接口和属性向其他捆绑软件等提供服务。
Services 的用例很明显,使用组件的典型情况是需要管理生命周期、配置或服务依赖关系,但不需要/不想发布组件以供跨包使用。
【讨论】:
BundleActivator 中实例化并在 registerService 中注册以老式方式创建服务”。我是 OSGi 的新手,这是我了解创建服务的唯一方法。新方法是什么?
“组件”的定义不如服务正式。
服务是在 OSGi 服务注册表中注册的任何对象,可以使用其接口名称进行查找。唯一的先决条件是服务应该实现一些接口......任何接口。例如,我可以在java.lang.Runnable 接口下注册一个可运行对象,客户端可以使用该接口名称查找它。
“组件”往往是一个生命周期被管理的对象,通常由一个组件框架来管理,例如声明式服务 (DS)、蓝图或 iPOJO。有关可用的不同组件框架的讨论,请参阅 OSGi 社区 Wiki 上的 this page。
一个组件可以组合或单独具有以下任何特性:
一般来说,使用组件框架是使用 OSGi 服务的最简单方法,因为该框架将管理与您想要使用的服务的绑定。例如,您可以说您的组件“依赖于”特定服务,在这种情况下,该组件将仅在该服务可用时创建和激活——并且当该服务不可用时它也将被销毁。
【讨论】: