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方法已被重写