@Component
Spring (またはその仕様の1@Repository
つなど)をOSGiサービスとして自動的に登録することは可能ですか?それで、1つのバンドルとOSGi Service Registry内で自動配線とSpringの他のすべての利点を使用して、バンドル間で通信できますか?
更新:この議論から、Eclipse Geminiでのみ、標準のブループリントを使用することは不可能であるように思われます。
Eclipse Geminiブループリント(以前のSpring Dynamic Modules、以前のSpring OSGi)に精通していると思いますか?
<service>
-tagを使用してBeanをエクスポートします。@Component
ただし、注釈付きのBeanなどをすべて自動的にエクスポートできるかどうかはわかりません。
@AlexeyRomanovが提案したハックなしでこれをサポートするための可能な実装はBeanFactoryPostProcessor
、フラグメントを介してGeminiBlueprintのエクステンダーバンドルに実装を追加することです。
そのプロセッサは、BeanFactory内に必要なOSGiエクスポート定義を作成でき、正しく機能するはずです。
これがどのように見えるかの例は、アノテーションServiceReferenceInjectionBeanPostProcessor
を介してOSGi-Servicesを注入できるようにするSpringDM/Geminiの拡張機能です。@ServiceReference
(Spring DMをリンクしましたが、このクラスはまだGeminiに存在するはずですが、javadocへの直接リンクが見つかりませんでした)
厄介な回避策、シングルトンBeanの場合のみ:インスタンスをコンストラクターの静的フィールドに格納し、このフィールドのゲッターをBlueprint/iPOJOファクトリメソッドとして使用します。