<dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm</artifactId> <version>9.2</version> </dependency> public class MyClass { public void myMethod() { System.out.println("Hello, World!"); } } import org.objectweb.asm.*; import static org.objectweb.asm.Opcodes.*; public class MyMethodVisitor extends MethodVisitor { public MyMethodVisitor(MethodVisitor mv) { super(ASM9, mv); } @Override public void visitCode() { super.visitCode(); mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); mv.visitLdcInsn("Before execution"); mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false); } } import org.objectweb.asm.*; public class MyClassVisitor extends ClassVisitor { public MyClassVisitor(ClassVisitor cv) { super(ASM9, cv); } @Override public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { MethodVisitor mv = super.visitMethod(access, name, descriptor, signature, exceptions); if (name.equals("myMethod")) { return new MyMethodVisitor(mv); } return mv; } public static void main(String[] args) throws Exception { ClassReader cr = new ClassReader("MyClass"); ClassWriter cw = new ClassWriter(cr, 0); MyClassVisitor cv = new MyClassVisitor(cw); cr.accept(cv, 0); byte[] modifiedClass = cw.toByteArray(); // ... } }


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