下面基于4.2版本的一个使用示例,演示了对类Foo进行修改方法名称,增加方法,修改方法内容等
package myASM;
public class Foo {
public void execute(){
System.out.println("test changed method name");
}
public void changeMethodContent(){
System.out.println("test changed method");
}
}
package myASM;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
public class MethodChangeClassAdapter extends ClassVisitor implements Opcodes{
public MethodChangeClassAdapter(ClassVisitor cv) {
super(Opcodes.ASM4, cv);
}
@Override
public void visit(int version, int access, String name, String signature,
String superName, String[] interfaces) {
if (cv != null) {
cv.visit(version, access, name, signature, superName, interfaces);
}
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc,
String signature, String[] exceptions) {
//当方法名为execute时,修改方法名为execute1
if (cv != null && "execute".equals(name)){
return cv.visitMethod(access, name + "1", desc, signature, exceptions);
}
//此处的changeMethodContent即