实现ClassVisitor接口
package com.uwo.resources.asm.test;import org.objectweb.asm.*;/** * Created by yanhao on 2017/5/15. */public class UwoClassVisitor implements ClassVisitor{ public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { System.out.println("visit"); } public void visitOuterClass(String owner, String name, String desc) { System.out.println("visitOuterClass"); } public void visitInnerClass(String name, String outerName, String innerName, int access) { System.out.println("visitInnerClass"); } public void visitAttribute(Attribute attr) { System.out.println("visitAttribute"); } public void visitSource(String source, String debug) { System.out.println("visitSource"); } public AnnotationVisitor visitAnnotation(String desc, boolean visible) { System.out.println("Annotation===========start=========="); System.out.println("Annotation desc = " + desc); System.out.println("Annotation visible = " + visible); System.out.println("Annotation===========end=========="); return null; } public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { System.out.println("Field===========start=========="); System.out.println("Field access = " + access); System.out.println("Field name = " + name); System.out.println("Field desc = " + desc); System.out.println("Field signature = " + signature); System.out.println("Field value = " + value); System.out.println("Field===========end=========="); return null; } public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { System.out.println("Method===========start=========="); System.out.println("Method access = " + access); System.out.println("Method name = " + name); System.out.println("Method desc = " + desc); System.out.println("Method signature = " + signature); System.out.println("Method exceptions = " + exceptions); System.out.println("Method===========end=========="); return null; } public void visitEnd() { System.out.println("visitEnd"); }}
执行代码
try { ClassReader cr = new ClassReader(Uwo.class.getName()); cr.accept(new UwoClassVisitor(), 0);} catch (IOException e) { e.printStackTrace();}
执行结果
visitvisitSourceField===========start==========Field access = 4Field name = nameField desc = Ljava/lang/String;Field signature = nullField value = nullField===========end==========Field===========start==========Field access = 4Field name = sexField desc = Ljava/lang/Integer;Field signature = nullField value = nullField===========end==========Method===========start==========Method access = 1Method name =Method desc = (Ljava/lang/String;)VMethod signature = nullMethod exceptions = nullMethod===========end==========Method===========start==========Method access = 1Method name = helloMethod desc = (Ljava/lang/String;)Ljava/lang/String;Method signature = nullMethod exceptions = nullMethod===========end==========Method===========start==========Method access = 1Method name = runMethod desc = ()VMethod signature = nullMethod exceptions = nullMethod===========end==========visitEnd