import org.objectweb.asm.*; public class MyClassTransformer extends ClassVisitor { public MyClassTransformer(ClassVisitor cv) { super(Opcodes.ASM5, cv); } @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { if (name.equals("myMethod")) { MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); return new MyMethodTransformer(mv); } return super.visitMethod(access, name, desc, signature, exceptions); } private static class MyMethodTransformer extends MethodVisitor { public MyMethodTransformer(MethodVisitor mv) { super(Opcodes.ASM5, mv); } @Override public void visitCode() { super.visitCode(); mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); mv.visitLdcInsn("Before method execution"); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false); } @Override public void visitInsn(int opcode) { super.visitInsn(opcode); if (opcode == Opcodes.RETURN) { mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); mv.visitLdcInsn("After method execution"); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false); } } } }


上一篇:
下一篇:
切换中文