假设我有这样的类(class):
public class ClassPrinter extends ClassVisitor {
public ClassPrinter(ClassWriter writer) {
super(Opcodes.ASM5, writer);
}
@Override
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
super.visit(version, access, name, signature, superName, interfaces);
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
// when this line will get executed?
System.out.println(name);
}
}
现在何时调用visitMethod
?是在 Java 中发生类加载时(即类访问者被调用的地方?)还是在类对象上调用方法时?
我对此感到困惑。
最佳答案
当您直接或间接调用访问者时,
visitMethod
将被调用。这与 JVM 中的类加载或执行完全无关。
ASM 使用访问者模式。您传入一个实现您感兴趣的回调的类,然后将其传递给类似 ClassNode.accept(cv) 的类,ClassNode 将自动调用类文件相应部分的所有回调.
关于java - 在asm中什么时候会调用ClassVisitor的visitMethod?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35317692/