java 动态编译 spring_springboot应用打包后, JavaCompiler无法动态加载类

@Evilsylvana 我的classLoader是自定义的,为了重写findClass实现从远端加载byteCode

我也是自定了的Classloader加载特定的class,之前遇到这个问题是因为构造方法中没有调用super(parent); 。当指定了父加载器对象为LaunchedURLClassLoader对象时就可以找到所有的类了。那为什么是这个对象呢?因为是在Springboot2中,就是这个类加载器代替了原来的Application Classloader。

// 取当前类的类加器对象,构造自定义类加载器的时候,传入这个对象作为父类 var launchedURLClassLoader = this.getClass().getClassLoader();

class MonkeyClassLoader extends ClassLoader {

private static final String NAME = "Monkey";

private byte[] classBytes;

public MonkeyClassLoader(ClassLoader parent, byte[] classBytes) {

super(parent);

this.classBytes = classBytes;

}

@Override

protected Class> findClass(String name) throws ClassNotFoundException {

if (classBytes == null) {

return super.findClass(name);

}

final Class> aClass = defineClass(name, classBytes, 0, classBytes.length);

classBytes = null;

return aClass;

}

@Override

public String getName() {

return NAME;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值