组件提供服务

时间:2013-04-01 14:30:44

标签: java service osgi bundle apache-felix

我对OSGI中的术语组件和服务有一个疑问。我正在使用apache felix框架。我已在此链接http://wiki.osgi.org/wiki/Declarative_Services#Providing_Services中读到组件提供服务。但是,当组件提供服务而不是接口时,我没有得到它?在我看来,接口是一个由组件实现的服务。

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

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

1 个答案:

答案 0 :(得分:1)

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

在声明服务中:

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

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

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

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

  1. 实施您要提供的服务的界面
  2. 表示您要将其注册为具有该界面的服务
  3. 如果您真的想要可以将实现类注册为提供的服务,但使用接口可以更好地分离。

    要在组件中使用其他服务,您需要引用它。在OSGi维基上,你提到该部分似乎缺失了。这个blog很好地解释了它。

    问候,弗兰克