0

我对 OSGI 中的组件和服务一词的理解存在疑问。我正在使用 apache felix 框架。我已在此链接http://wiki.osgi.org/wiki/Declarative_Services#Providing_Services中阅读了组件提供服务的内容。但是当组件提供服务而不是接口提供的服务时,我没有明白这一点?在我看来,接口是由组件实现的服务。

另一个疑问是,如果另一个捆绑包想要使用另一个捆绑包的服务而不是它是如何完成的?它使用接口(服务)或组件(实现类)。

请清除我的疑虑,以便我可以更好地了解服务和组件这两个术语以及与 scr 表示法的关系。

4

1 回答 1

1

您是对的,有时事物的名称有些不清楚,Felix 和 Equinox 之间的命名也存在一些细微差别。

在声明式服务中:

OSGi 中的服务是注册到服务注册表的对象。它可以是一个组件,也可以是您喜欢的任何对象。

组件是对象的具体实例,由声明式服务容器管理。您需要提供一个实现类,容器可以使用它来实例化该类。

有时这就是您所需要的:如果它的所有引用都存在,则该对象将被实例化,并在适用时调用激活/停用方法。

如果您还想将其注册为 OSGi 服务以便其他组件可以使用它,您需要:

  1. 实现您要提供的服务的接口
  2. 表示你想用那个接口将它注册为服务

如果你真的想要你可以将实现类注册为提供的服务,但使用接口是更好的分离。

要在组件中使用另一个服务,您需要引用它。在 OSGi wiki 上,您提到该部分似乎丢失了。这个博客很好地解释了它。

问候,弗兰克

于 2013-04-01T17:43:13.503 回答