2010-05-10 54 views
5

我有一個Java項目,期望外部模塊註冊它。這些模塊:在Java項目中引用外部模塊的最佳實踐

  • 實現主體工程
  • (有任何依賴關係一起)打包成單罐子特定接口
  • 含有一些人類可讀元信息(如模塊名稱) 。

我的主項目需要能夠在運行時加載(例如使用自己的類加載器)任何這些外部模塊。我的問題是:在主項目中註冊這些模塊的最佳方式是什麼(我寧願保留這個vanilla Java,而不是爲這個孤立的問題使用任何第三方框架/庫)?

我目前的解決方案是在主項目中保留一個.properties文件,其中key = name,value = class | delimiter |人類可讀名稱(或者協調兩個.properties文件以避免分隔符分析)。在運行時,主項目將加載到.properties文件中,並使用它找到的任何條目來驅動類加載器。

這讓我覺得很尷尬。有沒有更好的方法呢?

回答

0

讓所有模塊通過標準的xml文件表達它們的元數據。稱它爲「my-module-data.xml」。

在您的主容器啓動時它尋找一個classpath *:我模塊-data.xml中」(它可以有一個FrontController類),並委託給各個模塊FrontController類爲所欲爲:)

也是谷歌針對Spring-OSGi和他們的DOCO在這兒可以幫忙。

0

擴展在@ZZ編碼器...

在JDK 6中提到並在內部使用的服務提供程序模式現在在JDK 6中用ServiceLoader稍微正式化了。該概念由Netbeans Lookup API進一步擴大。

底層基礎架構是相同的。也就是說,兩個API都以相同的方式使用相同的工件。 NetBeans版本只是一個更靈活和更強大的API(例如,允許替代查找服務以及默認的服務)。

當然,如果沒有提到EJB,Spring和OSGi的統治性的,更「重量級」的標準,那將是失敗的。