Spring boot装载模板代码工程实践问题解决方案
- 替代方案
- 解决方案及解释
Spring boot装载模板代码工程中,后续有自定注解的要求,在本地运行无恙,打成jar启动后,自定义注解会无效。
替代方案
在测试compiler.getTask多种参数后,都无果,测试中,发现jdk的注解有效,最后就在jdk中找了一个类似的注解暂时顶上,先让项目最终如期上线。
解决方案及解释
最近,有空了,就回头看看,ClassLoader,双亲委派啊,加载类、并能正常运行的都是通过AppClassLoader加载的,如何让AppClassLoader读取并加载动态编译的class文件流,感觉问题就出在自定的ClassLoader上,如何能够在初始化ClassLoader的时候指定父加载器,翻开ClassLoader的构造方法:
protected ClassLoader(ClassLoader parent) {
this(checkCreateClassLoader(), parent);
}
做如下改动:
打包,运行,成了!
看来是父加载器无法读取到class的原因!