2010-07-07 41 views
3

我正在尋找像ServiceLoader這樣的東西,但它不依賴於SPI文件,所有的服務實現都應該被枚舉,然後添加到某個類加載器的路徑中,以便找到。作爲ServiceLoader替代方案,還可以在Java中使用哪些功能?

假設有一個應用程序,它具有接口和一些服務的實現。可以使用什麼框架,允許您將新的JAR添加到應用程序中,該應用程序包含一些新的實現,並且它們可以自動添加到該應用程序內所有類加載器的類路徑中?所有的類加載器在這裏都非常重要,因爲如果這是一個NetBeans模塊應用程序,那麼NetBeans平臺會有奇怪的魔力,並且您永遠不知道哪個類加載器被哪個線程使用,以及哪個類路徑等等。 ,如果應用程序不需要重新啓動以查找新的JAR,但這不是一個重要的要求。

我已經聽說過OSGi,但這看起來太大了,我只需要它的1%的功能。

感謝您的任何建議!

回答

7

最簡單的解決方案是使用JSPF

更多的「企業」可以使用OSGi ......但在這種情況下,您將不得不以iPOJO爲例。對不起,我終於重新讀你的消息。我認爲,與您所說的相反,OSGi正好滿足您的需求,因爲它精確地允許服務加載和動態連線。

IoC容器可能會提供一些擴展,這種功能(我認爲它至少可以使用Guice擴展)。

+0

JSPF看起來非常有前途的功能列表上,並似乎很簡單!我要去試試它......謝謝! – 2010-07-08 15:21:12

+0

它真的很有效!甚至可以與NetBeans一起使用!大!我現在更喜歡現成的解決方案。如果我有時間,我會嘗試寫一個Guice擴展。 – 2010-07-12 12:45:10

2

看來你正在尋找Netbeans的查詢API - Link

+1

對不起,但我想避免與NetBeans相關的一切 - 我只是不想再聽到關於NetBeans的任何內容!我所有的麻煩都來自於NetBeans相關的東西! – 2010-07-08 15:23:12

0

一個較新的替代方案(這是一個老問題)可能是sezpoz

它與JDK ServiceLoader非常相似,它使用META-INF資源查找,只是資源是由註釋處理器自動創建的。因此,它的註釋很重,通常在後處理的成本上更安全。它由Hudson/Jenkins使用。

我相信Kohsuke是第一個想出這個註釋處理思路:http://metainf-services.kohsuke.org/

相關問題