1. 程式人生 > 其它 >通過反射獲取註解資訊

通過反射獲取註解資訊

定義一個類名的註解

// 類名的註解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface TableLite {
    String value();
}

定義一個屬性的註解

//屬性的註解
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface FieldLite {
    String colunName();

    String type();

    int length();
}

定義一個Student實體類 模擬資料庫

@TableLite("db_student")
class Student2 {
    @FieldLite(colunName = "db_id", type = "int", length = 10)
    private int id;
    @FieldLite(colunName = "db_age", type = "int", length = 10)
    private int age;
    @FieldLite(colunName = "db_name"
, type = "varchar", length = 3) private String name; public Student2() { } public Student2(int id, int age, String name) { this.id = id; this.age = age; this.name = name; } public int getId() { return id; } public void setId
(int id) { this.id = id; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Student2{" + "id=" + id + ", age=" + age + ", name='" + name + '\'' + '}'; } }

測試反射獲取註解資訊

public class Demo4 {

    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {
        Class c1 = Class.forName("Student2");

        //通過反射獲得註解
        Annotation[] annotations = c1.getAnnotations();
        for (Annotation annotation : annotations) {
            System.out.println(annotation);
        }

        // 獲得註解的value的值
        TableLite tableLite = (TableLite) c1.getAnnotation(TableLite.class);
        String value = tableLite.value();
        System.out.println(value);

        // 獲得類指定的註解
        Field f = c1.getDeclaredField("name");
        FieldLite annotation = f.getAnnotation(FieldLite.class);
        System.out.println(annotation.colunName());
        System.out.println(annotation.type());
        System.out.println(annotation.length());
    }

}

控制檯結果輸出

在這裡插入圖片描述