簡體   English   中英

在Java項目中引用外部模塊的最佳實踐

[英]Best Practice For Referencing an External Module In a Java Project

我有一個Java項目,期望外部模塊注冊它。 這些模塊:

  • 在主項目中實現特定的接口
  • 被打包成uni-jar(以及任何依賴項)
  • 包含一些人類可讀的元信息(如模塊名稱)。

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

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

這對我來說很難過。 有更好的方法嗎?

Java中的標准方法是定義服務提供者。 看到,

http://java.sun.com/j2se/1.4.2/docs/guide/jar/jar.html#Service%20Provider

讓所有模塊通過標准xml文件表達其元數據。 稱之為“my-module-data.xml”。

在主容器啟動時,它會查找類路徑*:my-module-data.xml“(可以有一個FrontController類)並委托各個模塊的FrontController類來做任何想做的事:)

另外google for Spring-OSGI和他們的doco在這里也很有幫助。

擴展@ZZ Coder ......

所提到的服務提供者模式,在JDK內部使用,現在在帶有ServiceLoader的 JDK 6中更加正式化。 Netbeans Lookup API進一步擴展了這一概念。

底層基礎設施完全相同。 也就是說,兩個API都以相同的方式使用相同的工件。 NetBeans版本只是一個更靈活,更健壯的API(例如,允許其他查找服務,以及默認查找服務)。

當然,如果不提及EJB,Spring和OSGi的主導,更“重量級”標准,那將是一種疏忽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM