代码之家  ›  专栏  ›  技术社区  ›  mP.

一个接口的多个实现者。如何使用OSGi?

  •  3
  • mP.  · 技术社区  · 15 年前

    我对使用OSGi作为管理项目插件的方法很感兴趣。也就是说,我的接口可以有很多实现程序,每一个都出现在自己的/单独的OSGi包中,并且导出了实现类…

    2 回复  |  直到 15 年前
        1
  •  1
  •   Community Aniket Inge    7 年前

    Declarative Service 应该是去的路。

    您可以将接口声明为 service

    <service>
        <provide interface="my.Interface"/>
        <property name="foo" value="bar"
    </service>
    

    该接口的每个实现都可以定义捆绑激活和取消激活方法。
    但是真正整洁的是它们的性质:如果您使用最新的scr(“服务组件运行时”,它是实现新的和改进的osgi r4.2ds-声明性服务-规范的“扩展包”),那么您的类将不会从osgi模型中导入任何东西。他们仍然是纯粹的巫师。

    然后定义另一个依赖于第一个服务的服务:

    <reference name="myInterfaceServiceName"
        interface="my.Interface"
        bind="myActivationMethod" unbind="myDeactivationMethod"
        cardinality="0..n"/>
    

    该服务将检测并列出第一个服务的所有具体实例,并按您的意愿处理它们。

    Eclipse Extensions and Declarative Services 有关详细信息,请回答问题。

    演示文稿: Component Oriented Development in OSGi with Declarative Services, Spring Dynamic Modules and Apache iPOJO 来自EclipseCon2009,将为您提供一个具体的示例。

        2
  •  1
  •   Robin    15 年前

    这可以通过标准服务注册表以声明方式(如VONC)完成,也可以在运行时动态完成。

    任何实现者都可以简单地将其实现注册为服务,消费者可以从注册中心获得它们,注册中心是非常基本的OSGi工具。服务也可以用属性注册,因此消费者可以在查找服务时使用这些属性来区分实现。