如何使用Javassist删除方法?

时间:2015-05-17 04:54:49

标签: java javassist

我正在尝试使用Javassist从类文件删除方法。

目标类:"RemoveMethod"

目标方法:"DoubleCheck"

我的代码:

package javassist;     
        import java.io.IOException;
        import java.lang.reflect.Method;
        import javassist.*;

public class cRepair {
    public static void main(String[] args) throws NotFoundException, IOException, CannotCompileException{
    ClassPool pool = ClassPool.getDefault();  
    CtClass ctClass = pool.get("javassist.RemoveMethod");  
    CtMethod ctm = ctClass.getDeclaredMethod("DoubleCheck");  
    ctClass.removeMethod(ctm);
    ctClass.writeFile("C:/Users/workspace/Javaproject1/src/javassis"); 
 }
}

然后,使用文件" javassist.jar":

运行代码
javac -cp javassist.jar cRepair.java

然后检查目标类:

javap -verbose RemoveMethod.class

方法" DoubleCheck"还在那里!

这看起来很奇怪。为什么会发生这种情况以及如何解决?

1 个答案:

答案 0 :(得分:3)

您的代码将类的字节码读入内存并删除该方法。但它不会将修改后的字节码写回.class文件。 您可以致电CtClass#writeFile()来执行此操作。