Java Dev 8 - Java Bytecode (ASM Framework)

1.3k words

Type descriptor

Kiểu trong Java Type descriptor
boolean Z
char C
byte B
short S
int I
float F
long J
double D
Object Ljava/lang/Object;
int[] [I
Object[][] [[Ljava/lang/Object;

Method descriptor

Method ví dụ Method descriptor tương ứng
void m(int i, float f) (IF)V
int m(Object o) (Ljava/lang/Object;)I
int[] m(int i, String s) (ILjava/lang/String;)[I
Object m(int[] i) ([I)Ljava/lang/Object;
Object m(String str) (Ljava/lang/String;)Ljava/lang/Object;
public Test(){…} Method descriptor là ()V, tên method là: <init> ( điều này tượng trưng cho việc đây là constructor)
static int m = 1; Tên method là: <clinit>

ClassReader

ClassReader là trình phân tích cú pháp (parser), nó tạo ra một ClassVisitor để truy cập cấu trúc ClassFile, ClassFile được định nghĩa trong Java Virtual Machine Specification - JVMS.

Xem thêm JVMS: https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html

ClassReader sẽ parse nội dung ClassFile và gọi các method truy cập thích hợp của một ClassVisitor nhất định cho từng field, method và bytecode mà nó gặp phải.

ClassVisitor

ClassVisitor là một trình truy cập (visitor) sẽ truy cập qua các class Java. Các method của class này phải được gọi theo thứ tự sau: visit [ visitSource ] [ visitModule ][ visitNestHost ][ visitOuterClass ] ( visitAnnotation | visitTypeAnnotation | visitAttribute )* ( visitNestMember | [ * visitPermittedSubclass ] | visitInnerClass | visitRecordComponent | visitField | visitMethod )* visitEnd.