是否可以自动注册Spring @Component
(或其中一个规范;例如@Repository
)作为OSGi服务?所以我可以在一个捆绑包和OSGi Service Registry中使用自动装配和Spring的所有其他好处来在捆绑包之间进行通信?
更新:从this discussion开始,使用标准蓝图似乎无法实现,只有在Eclipse Gemini中才能实现。
答案 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工厂方法。