2012-04-13 67 views
5

是否可以將Spring @Component(或其規範之一;例如@Repository)自動註冊爲OSGi服務?所以我可以在一個bundle和OSGi Service Registry之間使用autowiring和Spring的所有其他好處來在bundle之間進行通信?將Spring組件導出爲OSGi服務

更新:從this discussion它似乎不可能使用標準藍圖,只能在Eclipse雙子座。

回答

5

我假設你熟悉Eclipse Gemini Blueprint(以前稱爲Spring Dynamic Modules,以前稱爲Spring OSGi)?

您可以使用<service>-tag將豆類出口。我不確定是否可以自動導出所有@Component等註釋的bean。

+0

啊,所以如果我_don't_有''標籤,藍圖將使用一個由Spring創建而不是試圖創建自己的副本。這是正確的嗎?這是否與Apache Aries Blueprint一樣工作? – 2012-04-13 10:06:23

+0

如果你做''顯式創建。恐怕我從未使用過Aries Blueprint – artbristol 2012-04-13 10:13:21

+2

和@artbristol只是喜歡OSGi :) – 2012-04-13 10:32:04

0

討厭的解決方法,僅適用於singleton bean:將實例存儲在構造函數中的靜態字段中,並將此字段的getter用作Blueprint/iPOJO工廠方法。

1

沒有黑客@AlexeyRomanov建議可能的實現來支持這個可能是通過片段添加一個BeanFactoryPostProcessor實現到Gemini Blueprint的擴展束。

該處理器可以在BeanFactory內部創建所需的OSGi導出定義,並且它應該可以正常工作。

一個可能的例子是ServiceReferenceInjectionBeanPostProcessor形式SpringDM/Gemini的擴展,它允許你通過@ServiceReference註解獲得OSGi-Services注入。 (雖然我聯繫春天DM這個類應該還是出現在雙子座,但我無法找到一個直接鏈接到他們的javadoc)