在OSGi下,组件与服务之间的主要区别是什么? 据我了解,所有服务必须是组件,但并非所有组件都必须是服务。
使用样本用例有什么好处?
答案 0 :(得分:54)
“组件”的定义不如服务。
服务是在OSGi服务注册表中注册的任何对象,可以使用其接口名称进行查找。唯一的先决条件是服务应该实现一些接口......任何接口。例如,我可以在java.lang.Runnable
接口下注册一个可运行的对象,客户端可以使用该接口名称查找它。
“组件”往往是一个对象,其生命周期通常由声明服务(DS),蓝图或iPOJO等组件框架进行管理。有关可用的不同组件框架的讨论,请参阅OSGi社区Wiki上的this page。
组件可以组合使用或单独使用以下任何功能:
通常,使用组件框架是使用OSGi服务的最简单方法,因为框架将管理对您要使用的服务的绑定。例如,您可以说您的组件“依赖于”特定服务,在这种情况下,只有在该服务可用时才会创建和激活组件 - 并且当服务不可用时它也将被销毁。
答案 1 :(得分:7)
编辑:请参阅Neil Bartlett的回答,我已经非常具体地回答了声明服务,但它比我在这里错误陈述的更加微妙。
简而言之:组件是服务的消费者而不是提供者,服务是组件registring作为服务提供者的扩展。
组件具有生命周期(de / activate和modify),服务依赖关系管理(un / bind)。
服务是组件的扩展;通过服务注册表,它通过发布已实现的接口和属性为其他捆绑包提供服务。
服务的用例很明显,使用组件的典型情况是需要管理生命周期,配置或服务依赖性,但不需要/想要发布组件以进行跨包使用。