【发布时间】:2013-03-22 13:20:11
【问题描述】:
我对 OSGI 概念有一些愚蠢的疑问,但需要澄清它们以便更好地理解概念。谁能告诉我 OSGI 服务和组件之间有什么区别。我所知道的是,Service 就像 java 中的接口文件,可以由不同的服务或组件使用。而组件就像服务的特定实现。
如果我错了,请告诉我,或者建议一些链接,让我可以很好地得到这些东西。
【问题讨论】:
标签: java osgi equinox osgi-bundle knopflerfish
我对 OSGI 概念有一些愚蠢的疑问,但需要澄清它们以便更好地理解概念。谁能告诉我 OSGI 服务和组件之间有什么区别。我所知道的是,Service 就像 java 中的接口文件,可以由不同的服务或组件使用。而组件就像服务的特定实现。
如果我错了,请告诉我,或者建议一些链接,让我可以很好地得到这些东西。
【问题讨论】:
标签: java osgi equinox osgi-bundle knopflerfish
OSGi 核心规范定义了服务模型,它是 OSGi 概念的关键部分。服务是实现声明类型(通常是接口)的对象(实例)。 OSGi 框架提供了服务层,它是服务提供者和服务消费者之间的代理。
DS 引入了服务组件的概念,它们是捆绑中的类,由 DS 运行时 (SCR) 管理。组件由 SCR 读取的 bundle 中的 XML 描述。这些组件一旦被实例化并被声明为服务,就可以被 SCR 注册为服务。
所以组件可以是服务(但它们不一定是)并且它们可以使用服务。
【讨论】:
OSGi 发展了服务的概念,因此包可以减少它们与其他包的耦合 - 即。实现松耦合。 “最松散”的耦合来自使用动态服务,其中产生服务的捆绑包在消费者注册以使用这些服务时动态启动。动态服务模型与 OSGi 一起经历了多次演变,包括服务注册和事件侦听、服务跟踪器,最后是声明式服务。
除了最后一个(声明式服务)之外,服务注册码都放在捆绑包的激活器中。使用声明式服务,公开服务的包称为组件,它在框架理解的 component.xml 文件中声明 - 不需要激活器。在 Eclipse IDE 中,您可以通过右键单击包并添加“组件定义”来使用声明式服务。有一本关于该主题的非常好的书,它通过教程带您了解该技术:
【讨论】: