什么时候会在asm中调用ClassVisitor的visitMethod?

时间:2016-02-10 14:21:27

标签: java bytecode java-bytecode-asm bytecode-manipulation

我们说我有这样的课程:

.text

现在何时会调用.txt?是在Java中发生类加载的时候(那是调用类访问者的地方?)还是在类对象上调用方法时?

我对此感到困惑。

2 个答案:

答案 0 :(得分:2)

当您直接或间接呼叫访问者时,会调用

visitMethod。这与JVM中的类加载或执行完全无关。

ASM使用访客模式。您传入一个实现您感兴趣的回调的类,然后将其传递给类似ClassNode.accept(cv)的类,ClassNode将自动为类文件的相应部分调用所有回调。

答案 1 :(得分:0)

通常,您将ClassVisitor链接到ClassReader,它会读取给定的类并触发所有visit*方法

ClassReader cr = new ClassReader(className);
cr.accept(new ClassPrinter(), 0);

当您想要阅读课程(并打印方法名称)时,完全取决于您。

如果你想转换一个类并将它加载到JVM,那么可能是子类ClassLoader,在那里读取类,转换它(使用{{1方法),并用visit*编写。从某些代码示例中查看ASM的ClassWriter文件夹(例如examples)。