我讓用戶使用URLClassLoader從遠程位置導入類似插件的類,因此這些導入的類不存在於構建路徑中(但是,它們全部實現了包含在內的接口IPlugin)。等同於ObjectOutputStream,不僅保存其狀態,還保存整個對象?
我假設可以簡單地使用ObjectOutputStream將所有加載的插件保存到文件中,然後使用ObjectInputStream讀取這些插件。這似乎並不是這種情況,因爲它保存的只是對象的狀態,而不是包含的邏輯(即方法)。
什麼我希望做是爲了節省加載的插件(activePlugins)與ObjectOutputStream的名單:
ObjectOutputStream oos = new ObjectOutputStream(*fileoutputstream*);
oos.writeObject(activePlugins);
oos.close();
在另一個運行時
然後,負載/恢復所有的這些插件與ObjectInputStream的:
ObjectInputStream ois = new ObjectInputStream(*fileinputstream*);
activePlugins = (ArrayList<IPlugin>) ois.readObject();
但是由於實際的對象類在構建路徑中不可用(它們位於硬盤上的其他位置),因此它會出現故障。我所追求的是某種加載對象的方式,而不需要可用的類,即加載具有狀態和沒有依賴關係的對象。
您還必須序列化流中的類字節。您可以通過'getResourceAsStream'獲取類字節,然後在另一端使用這些字節在自定義類加載器中加載類,然後將結果類轉換爲接口,並通過接口使用該對象。 – MeBigFatGuy 2011-05-09 17:20:28