我目前正致力于将一个组件及其依赖项打包在一起的任务,并从中创建一个包含所有必需内容的独立组件。
我的情况是我可能有用户定义的类,我也需要包含在这个组件中。
我正在寻找一种以纤巧/智能方式序列化它们的方法。这些类具有继承层次结构,例如:
FrameWorkSuper
--------------
UserSuper
UserClass
有没有办法只序列化类的用户定义部分以保持足迹小?任何源自框架的东西肯定都包含在最终组件中。因此,我希望稍后序列化并加载整个用户定义的部分,使得类得到框架部分也在包中。
有没有办法实现我应该使用的任务或任何建议?
答案 0 :(得分:1)
我认为您要做的是传输用户定义类的实际字节代码。
创建一个自定义类加载器,它获取所有类的字节代码,并将其findClass方法覆盖为
// first try our cache of loaded classes
if (loadedClasses.containsKey(name)) {
return loadedClasses.get(name);
}
// that didn't work, maybe the class was compiled but not yet loaded
if (compiledClasses.containsKey(name)) {
// get the representation from the cache
InMemoryClassJavaFileObject inMemoryRepresentation = compiledClasses.get(name);
// let our parent define the class
Class<?> clazz = defineClass(name, inMemoryRepresentation.getData(), 0, inMemoryRepresentation.getData().length);
// and store it in the cache for later retrieval
loadedClasses.put(name, clazz);
return clazz;
}
请注意,您无需创建InMemoryClassJavaFileObject
,只需使用字节数组即可。
这使您可以在远程站点上访问类本身:您可以创建实例并使用它们的方法。