假設我在我的API包中有一個接口Book
,並且在我的實現包中有一些實現BookImpl
。通常,對於單身人士,我會使用服務註冊表來獲得我的實施。但是,對於Book
,我希望每次獲得實現時都創建一個新實例。OSGi - 獲取接口的實現
在OSGi中這樣做的正常模式是什麼?
我有服務BookCreator
與方法createBook
,我從服務註冊表中獲取並用於創建我的書籍實例嗎?
假設我在我的API包中有一個接口Book
,並且在我的實現包中有一些實現BookImpl
。通常,對於單身人士,我會使用服務註冊表來獲得我的實施。但是,對於Book
,我希望每次獲得實現時都創建一個新實例。OSGi - 獲取接口的實現
在OSGi中這樣做的正常模式是什麼?
我有服務BookCreator
與方法createBook
,我從服務註冊表中獲取並用於創建我的書籍實例嗎?
2年前,我經過了漫長而艱苦的思考,發現提議的解決方案作爲一個工廠來運作是最好的解決方案。原因是相關的類型安全。聲明式服務確實有內置的可能性,使用組件工廠可以創建組件實例,它的使用並不像安全工廠那麼容易。我也考慮將這個概念放在框架中,但也缺乏簡單的工廠服務。
所以,是的,你的想法是我所知道的最好的解決方案。
這是一個很好的選擇,是的。你也可以考慮一個服務注入框架,比如說明性服務或者藍圖。 Blueprint允許你指定一個原型範圍,這樣'Book'的每個消費者都可以獲得自己的實例,這個實例可能有或沒有足夠的獨特性來幫助你的用例。 (DS有類似的東西)。
但是,即使同一個消費者實例需要獲得多個Book,並且您使用了工廠,但使用其中一個框架將使您的服務訪問更加健壯。
我認爲你在DS中討論的工具是ServiceFactory,它可以通過'servicefactory = true'來啓用。這不是海報所要求的,因爲它只是給每個消費者捆綁一個新的服務實例,但它不會給消費者明確的程序控制實例的數量 - 即它不提供消費者可以致電的「創造」方法。 – 2012-07-29 08:26:09