【发布时间】:2011-05-09 16:35:39
【问题描述】:
我让用户使用 URLClassLoader 从远程位置导入类似插件的类,因此这些导入的类不存在于构建路径中(但是,它们都实现了一个接口 IPlugin包括)。
我假设可以简单地使用 ObjectOutputStream 将所有加载的插件保存到文件中,然后使用 ObjectInputStream 读取它们。但情况似乎并非如此,因为它保存的只是对象的状态,而不是包含的逻辑(即方法)。
我希望做的是用 ObjectOutputStream 保存加载的插件列表(activePlugins):
ObjectOutputStream oos = new ObjectOutputStream(*fileoutputstream*);
oos.writeObject(activePlugins);
oos.close();
然后在另一个运行时,使用 ObjectInputStream 加载/恢复所有这些插件:
ObjectInputStream ois = new ObjectInputStream(*fileinputstream*);
activePlugins = (ArrayList<IPlugin>) ois.readObject();
但是由于实际的对象类在构建路径中不可用(它们位于硬盘驱动器的其他位置),所以它变得混乱了。我所追求的是在没有可用类的情况下加载对象的某种方式,即加载具有状态且不具有依赖关系的对象。
【问题讨论】:
-
您还必须序列化流上的类字节。您可以通过
getResourceAsStream获取类字节,然后在另一边,使用这些字节在自定义类加载器中加载类,然后将生成的类转换为您的接口,并通过您的接口使用该对象。
标签: java serialization classloader