我需要在运行时被调用的方法名称(如果可能的话)打印到标准输出。在类库中加载它们时,我能够获得它们的类名,但是当涉及到方法时,我还是很困惑。
很多资源在假设您知道函数所在类的名称的情况下对此进行了描述,但是我想解析所有类。
我知道我需要重写访问方法功能,但不确定从哪里开始。
public class LogMethodClassVisitor extends ClassVisitor {
private String className;
public LogMethodClassVisitor(ClassVisitor cv, String pClassName) {
super(Opcodes.ASM5, cv);
className = pClassName;
}
@Override
public MethodVisitor visitMethod (int access, String name, String desc,
String signature, String[] exceptions) {
return null;
//put logic in here
}
}
public class ImportantLogClassTransformer implements ClassFileTransformer {
public byte[] transform(ClassLoader loader, String className,
Class<?> classBeingRedefined, ProtectionDomain protectionDomain,
byte[] classfileBuffer) throws IllegalClassFormatException {
ClassReader cr = new ClassReader(classfileBuffer);
ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_FRAMES);
ClassVisitor cv = (ClassVisitor) new LogMethodClassVisitor(cw, className);
cr.accept(cv, 0);
return cw.toByteArray();
}
}