将Spring组件导出为OSGi服务

时间:2012-04-13 09:37:50

标签: spring service osgi

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

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

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

一个可能的实现来支持这个没有hack @AlexeyRomanov建议的可能是通过片段向Gemini Blueprint的扩展器包添加BeanFactoryPostProcessor实现。

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

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

答案 2 :(得分:0)

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