<dependencies>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>9.2</version>
</dependency>
</dependencies>
ClassReader classReader = new ClassReader(className);
ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
ClassVisitor classVisitor = new MyClassVisitor(classWriter);
classReader.accept(classVisitor, ClassReader.EXPAND_FRAMES);
byte[] modifiedClassBytes = classWriter.toByteArray();
class MyClassVisitor extends ClassVisitor {
public MyClassVisitor(ClassVisitor classVisitor) {
super(Opcodes.ASM9, classVisitor);
}
@Override
public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) {
System.out.println("Method: " + name);
return super.visitMethod(access, name, descriptor, signature, exceptions);
}
}
ClassLoader classLoader = new CustomClassLoader();
Class<?> modifiedClass = classLoader.defineClass(className, modifiedClassBytes);
Object instance = modifiedClass.newInstance();
Method method = modifiedClass.getDeclaredMethod("methodName");
method.invoke(instance);