我让用户使用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