简介
FiedVisitor是用来在访问类的域字节码过程中创建域或者修改域字节码信息的;
MethodVisitor是用来在访问类的方法字节码过程中创建方法或者修改方法字节码信息从而实现改变方法行为;
FieldVisitor
FieldVisitor也是有一定访问顺序的,如下:
其访问顺序为:
( visitAnnotation | visitTypeAnnotation| visitAttribute )* visitEnd
()*中可以访问多次,而visitEnd在访问结束时必须访问一次
FieldVisitor方法解析:
visitAnnotation:访问域的注解;
public AnnotationVisitor visitAnnotation(final String descriptor, final boolean visible) {
if (fv != null) {
return fv.visitAnnotation(descriptor, visible);
}
return null;
}
其中
descriptor表示注解类的描述,即注解类的描述:如“Ljava/lang/JavaBean”等;
visible表示该注解运行时是否可见;
visitTypeAnnotation:访问域的类型上的注解
public AnnotationVisitor visitTypeAnnotation(
final int typeRef, final TypePath typePath, final String descriptor, final boolean visible) {
if (api < Opcodes.ASM5) {
throw new UnsupportedOperationException("This feature requires ASM5");
}
if (fv != null) {
return fv.visitTypeAnnotation(typeRef, typePath, descriptor, visible);
}
return null;
}
visitAttribtue:访问域属性
visitEnd:域访问完成后必须调用该方法;
MethodVisitor方法解析
MethodVisitor其方法访问顺序如下:
( visitParameter )*
[ visitAnnotationDefault ]
( visitAnnotation |visitAnnotableParameterCount | visitParameterAnnotation