【问题标题】:Exporting Spring components as OSGi services将 Spring 组件导出为 OSGi 服务
【发布时间】:2012-04-25 16:19:38
【问题描述】:

是否可以将 Spring @Component(或其规范之一;例如 @Repository)自动注册为 OSGi 服务?所以我可以在一个包和 OSGi 服务注册表中使用 Spring 的自动装配和所有其他好处来在包之间进行通信?

更新:从 this discussion 开始,似乎无法使用标准蓝图,只能在 Eclipse Gemini 中使用。

【问题讨论】:

    标签: spring service osgi


    【解决方案1】:

    在没有 @AlexeyRomanov 建议的 hack 的情况下支持这一点的可能实现是通过片段将 BeanFactoryPostProcessor 实现添加到 Gemini Blueprint 的扩展包。

    该处理器可以在 BeanFactory 中创建所需的 OSGi 导出定义,它应该可以正常工作。

    一个例子就是 ServiceReferenceInjectionBeanPostProcessor 形式的 SpringDM/Gemini 的扩展,它允许您通过 @ServiceReference 注释注入 OSGi 服务。 (虽然我链接了 Spring DM 这个类应该仍然存在于 Gemini 中,但我找不到他们的 javadoc 的直接链接)

    【讨论】:

      【解决方案2】:

      我假设您熟悉 Eclipse Gemini Blueprint(以前称为 Spring Dynamic Modules,以前称为 Spring OSGi)?

      您使用<service>-tag 导出您的bean。我不确定您是否可以自动导出所有 @Component 等带注释的 bean。

      【讨论】:

      • 啊,所以如果我没有<bean> 标签,Blueprint 将使用 Spring 创建的标签,而不是尝试创建自己的副本。这是正确的吗?这会以同样的方式与 Apache Aries Blueprint 一起使用吗?
      • 如果你使用<service ref="beanToPublish" ...",那么Spring bean 必须存在,要么被注释(并命名为beanToPublish),要么用<bean> 显式创建。恐怕我从未使用过 Aries 蓝图。
      • 和@artbristol 就是喜欢 OSGi :)
      【解决方案3】:

      讨厌的解决方法,仅适用于单例 bean:将实例存储在构造函数的静态字段中,并将该字段的 getter 用作 Blueprint/iPOJO 工厂方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-09
        • 1970-01-01
        • 1970-01-01
        • 2018-09-14
        • 2014-02-16
        • 2010-10-02
        相关资源
        最近更新 更多