我对OSGI中的术语组件和服务有一个疑问。我正在使用apache felix框架。我已在此链接http://wiki.osgi.org/wiki/Declarative_Services#Providing_Services中读到组件提供服务。但是,当组件提供服务而不是接口时,我没有得到它?在我看来,接口是一个由组件实现的服务。
另一个疑问是,如果另一个捆绑包想要使用另一个捆绑包的服务而不是如何使用它?它使用接口(服务)或组件(实现类)。
请清除我的疑虑,以便我能更好地了解两个术语的服务和组件以及与scr表示法的关系。
答案 0 :(得分:1)
你是对的,事情的名称有时有些不清楚,Felix和Equinox之间的命名也有一些细微差别。
在声明服务中:
OSGi中的服务是注册到服务注册表的对象。它可以是一个组件,但它可以是您喜欢的任何对象。
组件是对象的具体实例,由声明性服务容器管理。您需要提供一个实现类,容器可以使用它来实例化该类。
有时这就是您所需要的:如果存在所有引用,则将实例化此对象,并在适用时调用激活/取消激活方法。
如果您还想将其注册为OSGi服务,以便其他组件可以使用它,您需要:
如果您真的想要可以将实现类注册为提供的服务,但使用接口可以更好地分离。
要在组件中使用其他服务,您需要引用它。在OSGi维基上,你提到该部分似乎缺失了。这个blog很好地解释了它。
问候,弗兰克