package test.asm.aop; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; public class ChangeToChildConstructorMethodAdapter extends MethodVisitor { private String superClassName; public ChangeToChildConstructorMethodAdapter(MethodVisitor mv, String superClassName) { super(Opcodes.ASM4, mv); this.superClassName = superClassName; } public void visitMethodInsn(int opcode, String owner, String name, String desc) { // 调用父类的构造函数时 if (opcode == Opcodes.INVOKESPECIAL && name.equals("<init>")) { owner = superClassName; } super.visitMethodInsn(opcode, owner, name, desc);// 改写父类为 // superClassName } }