是否可以自动将 Spring @Component
(或其规范之一;例如@Repository
)注册为 OSGi 服务?所以我可以在一个包中使用自动装配和 Spring 的所有其他好处和 OSGi 服务注册表在包之间进行通信?
更新:从这个讨论来看,使用标准蓝图似乎是不可能的,只能在 Eclipse Gemini 中使用。
我假设您熟悉Eclipse Gemini Blueprint(以前称为 Spring Dynamic Modules,以前称为 Spring OSGi)?
<service>
您使用-tag导出您的 bean 。我不确定你是否可以@Component
自动导出所有等注释的bean。
在没有@AlexeyRomanov 建议的 hack 的情况下支持这一点的可能实现可能是BeanFactoryPostProcessor
通过片段向 Gemini Blueprint 的扩展包添加一个实现。
该处理器可以在 BeanFactory 中创建所需的 OSGi 导出定义,并且它应该可以正常工作。
一个例子就是ServiceReferenceInjectionBeanPostProcessor
SpringDM's/Gemini's extension 的形式,它允许您通过@ServiceReference
注解注入 OSGi-Services。(虽然我链接了 Spring DM 这个类应该仍然存在于 Gemini 中,但我找不到他们的 javadoc 的直接链接)
讨厌的解决方法,仅适用于单例 bean:将实例存储在构造函数的静态字段中,并使用该字段的 getter 作为 Blueprint/iPOJO 工厂方法。