<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();
// ...
}
}