我在寫一個Java應用程序,它將加載第三方「驅動程序」。我打算開發一個接口來定義「驅動程序」必須實現的必要方法,以便在應用程序中工作。分享接口
意圖是將「驅動程序」包含在jar文件中。然後第三方「驅動程序」開發人員將被要求實現該界面。
正如我想弄明白這一點,我將「驅動程序」代碼移動到jar中,發現我遇到了麻煩,因爲我在主應用程序和jar文件中都定義了接口。
是否有推薦的方法來實現這種方法,或者我是否以錯誤的方式?
j
我在寫一個Java應用程序,它將加載第三方「驅動程序」。我打算開發一個接口來定義「驅動程序」必須實現的必要方法,以便在應用程序中工作。分享接口
意圖是將「驅動程序」包含在jar文件中。然後第三方「驅動程序」開發人員將被要求實現該界面。
正如我想弄明白這一點,我將「驅動程序」代碼移動到jar中,發現我遇到了麻煩,因爲我在主應用程序和jar文件中都定義了接口。
是否有推薦的方法來實現這種方法,或者我是否以錯誤的方式?
j
你基本上定義了一次界面,在一個API jar中。這個jar然後被主應用程序和驅動程序使用。
驅動程序庫然後將此API jar作爲由主應用程序提供的依賴項。
就Maven而言,依賴關係的範圍爲provided
或compile
。
請注意,您應該避免在不同的庫中擁有相同的類兩次,因爲這些類很可能導致類加載問題,類轉換異常等(除非像大多數應用程序服務器一樣,有一些類加載器範圍來隔離應用程序) 。
由於接口是你提供的API /庫的一部分,你應該有接口,第三方應該導入你的API(來自你的jar)並實現適當的接口,比如Java API如何提供SQL接口,但不是實際的實現,而MySQL實現Java API接口。如果驅動程序的接口在應用程序外部使用,則可以將它作爲單獨的jar打包,但如果它僅用於與庫的交互,則應該與庫的其餘部分一起打包。
+1這是正確的答案。這個設計的一個優秀而着名的例子是'servlet-api.jar',它隨Tomcat的每個副本一起提供。 –