java如何动态重写一个类到方法??
作者:bin首先我们定义一个类用于测试:
创建文件:BenClass.java
public class BenClass {
public String toString(){
return "原方法";
}
}
创建@Test方法:
@Test
public void trest() throws Exception{
String className = "BenClass";
ClassPool pool = ClassPool.getDefault();
CtClass ctClazz = pool.get(className);
//找到原来到类
CtMethod method = ctClazz.getDeclaredMethod("toString");
//定义一个新方法,将老方法复制到新方法
CtMethod newMethod = CtNewMethod.copy(method, ctClazz, null);
//新方法设置方法内容
newMethod.setBody("return \"toString方法已被重写\";");
//删掉老方法
ctClazz.removeMethod(method);
//将新方法放入类中
ctClazz.addMethod(newMethod);
//重新编译类,该操作会冻结当前类
Class<?> clazz = ctClazz.toClass();
//解冻
ctClazz.defrost();
//测试我们的修改
BenClass benClass = new BenClass();
System.out.println("重构后的方法输出:" + benClass.toString());
}
}
输出结果
$ 重构后的方法输出:toString方法已被重写