首页 文章

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

提问于
浏览
38

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

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

2 回答

  • 53

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

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

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

    组件可以组合或单独具有以下任何功能:

    • 可以启动和停止组件;这将被视为"active"组件,尽管这也是一个非正式术语 . 不需要启动或停止的组件称为被动组件 .

    • 组件可以将自身发布为OSGi服务 .

    • 组件可以绑定或使用OSGi服务 .

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

  • 7

    EDIT: See Neil Bartlett's answer, I've answered quite specifically wrt Declarative Services but it's more subtle than I've stated incorrectly here.

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

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

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

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

相关问题