2010-07-13 51 views
8

我想在Java應用程序運行時發現接口的所有實現,並從用戶可以添加到文件夾的JAR文件動態加載這些類。基本上這是一個插件系統。簡單的Java服務發現框架

我發現這幾個解決方案:

是否還有其他廣泛使用的解決方案?

更新:不需要代碼分離,而且OSGi似乎對於我現在的簡單需求來說太複雜了。我還在這個問題的標題中加上了「簡單」來澄清我的意圖。

+0

OSGi可以解決這樣的問題,此外還提供了保持模塊分離的方法等,如果您擁有依賴於其他庫的插件,這將非常重要。 – Jesper 2010-07-13 08:55:08

回答

4

它有點重的一面,但你應該考慮Apache FelixEclipse Equinox,都是OSGi實現,它們非常活躍和踢,但可能矯枉過正滿足您的需求。但是,這是OSGi設計要解決的問題之一。

0

就像@skaffman所說,OSGi和現代實現似乎是一個完美的解決方案。如果你對guice有興趣,可以考慮iPOJO,它將OSGi堆棧中的註釋完美地結合在一起(注意iPOJO適用於任何OSGi平臺)。如果您更喜歡XML/Spring的潮流,請考慮使用Blueprint

最後,考慮到JSPF,我不會分享你對它的不成熟的看法。在該項目上進行了一些合作後,我發現它在其領域非常有用,因爲它允許輕鬆使用插件,而無需OSGi提供的麻煩和類路徑分離。

+0

你可以發佈一個鏈接到一個簡單的JSPF例子嗎?我正在嘗試使用該框架,但我無法真正瞭解Options功能的工作方式。 – capovawi 2014-03-14 09:47:10

0

+1 SPI - 它是輕量級的,有點維護(服務/ *文本文件),但Java的類加載器工作的方式任何「自動發現」都不會100%可靠;你可以用一個簡單的程序來減少文本文件的麻煩,對於給定的項目/目錄生成和/或(我推薦)測試包括所有實現的測試。

+2 OSGi - 如果你願意去次中量級,並注意實現變得越來越輕,更容易(至少其中的一些!)

1

你可以嘗試阿帕奇河(原Jini的)的服務發現

http://river.apache.org/

它通過一個發現服務遠程接口併爲您下載代理,這是一個RMI存根。