團長大人的學習筆記——自定義Java註解

Java註解

註解式Java5後才產生的技術,爲框架簡化代碼而存在的
框架

註解的分類

  • 元註解(jdk自帶註解):如@Override@SuppessWarnings
  • 自定義註解
    建立註解只須要經過@interface就能夠使用了
public @interface AddAnnotation {
    
}
複製代碼

定義註解

  • 使用@Target就能夠指定你的註解只能放在哪裏

    好比@Target(ElementType.METHOD)就規定這個註解只能放在方法上ide

  • 使用@Retention用於描述註解的生命週期,

    好比@Retention(RetentionPolicy.RUNTIME)表示運行時有效spa

  • 還能夠直接在註解裏定義成員變量,用default來定義默認值

    我寫出的示例以下
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AddAnnotation {
    int userId() default 0;

    String userName() default "默認名字";

    String[] arrays();
}
複製代碼

調用時以下code

public class User {
    @AddAnnotation(userId = 3,arrays = {"123","321"})
    public void add() {
        
    }
}
複製代碼

使用反射機制獲取註解的值

直接上代碼對象

public static void main(String[] args) throws ClassNotFoundException {
        Class<?> targetClass = Class.forName("com.libi.entity.User");
        //獲取當前類全部的方法(不包括父類的方法)
        Method[] declaredMethods = targetClass.getDeclaredMethods();
        for (Method declaredMethod : declaredMethods) {
            //拿到這個方法上的這個註解對象
            AddAnnotation addAnnotation = declaredMethod.getDeclaredAnnotation(AddAnnotation.class);
            if (addAnnotation == null) {
                //若是爲空表示這個方法沒有這個註解
                continue;
            }
            //這裏表示拿到了這個註解
            System.out.println("userId:"+ addAnnotation.userId());
            System.out.println("userName:"+ addAnnotation.userName());
            System.out.println("arrays:"+ addAnnotation.arrays()[0]);
        }
    }
複製代碼
相關文章
相關標籤/搜索