2015-04-03 89 views
-1

我試圖做一個應用程序,將能夠從外部.jar文件加載類。但是,我需要引用它將按類型加載的類(它是Sax分析器的DefaultHandler的孫類)。動態加載一個擴展另一個類(來自jar)

我想我會做這種方式:

我將定義一個抽象類,錘擴展了DefaultHandler

在外部文件將延長錘子類(我們稱之爲外部類SpecialHammer)

我將使用URLLoader加載SpecialHammer。


的問題是,我不知道如何(在哪裏)來定義錘,以確保應用程序認爲它實際上是加載SpecialHammer擴展它知道錘。我試着在應用程序和外部.jar文件中放入相同的Hammer類,但它不起作用:/

我基本上需要知道如何在兩個jar之間共享一個抽象類,以便他們都知道他們正在嘗試到同一班。

我使用Eclipse,如果這是任何幫助。

+0

只是外部JAR添加到項目的類路徑 – Brovoker 2015-04-03 13:22:21

+0

這是可悲的不是一點 - 我想要的應用程序,而不需要重新編譯的可擴展(它會讀取XML文件,用戶將有提供一個特定的類來處理xml讀取 - 因爲我不能依靠xml被格式化爲相同的方式。) – Nouth 2015-04-03 13:48:50

回答

0

在理論上應用程序JAR需要持有一個接口,這個接口需要通過類擴展被用來所以可能最好解析有它在依賴同時在客戶端和處理應用程序可以共享。

我認爲在你的例子中共享的類將是Hammer(抽象類)和DefaultHammer,這樣客戶端可以選擇從哪個類擴展。

因此,您將在common.jar中具有抽象類Hammer和DefaultHammer,並且application.jar和client.jar都將使用common.jar作爲依賴項。

或許有點偏離主題,但也許更好的解決方案,取決於用戶/客戶端將使用Java的SPI接口(或自己推出)。或者也許是Byteman,它允許你將代碼注入到JVM中(是一個將java代碼包裝爲-agent選項的DSL)。

Blog about using Byteman

+0

好吧,謝謝:)我認爲你剛解決了我的問題。 – Nouth 2015-04-07 19:49:46

相關問題