Java(5)註解

Javalove劉志先發表於2020-11-19

一、註解的理解

  1. JDK5.0新增了註解Annotation
  2. Annotation本質就是程式碼中的特殊標記。這些標記可以在編譯, 類載入, 執行時被讀取, 並執行相應的處理。通過使用 Annotation, 程式設計師可以在不改變原有邏輯的情況下, 在原始檔中嵌入一些補充資訊。程式碼分析工具、開發工具和部署工具可以通過這些補充資訊進行驗證或者進行部署。
  3. Annotation 可以像修飾符一樣被使用, 可用於修飾包,類, 構造器, 方 法, 成員變數, 引數, 區域性變數的宣告, 這些資訊被儲存在 Annotation 的 “name=value” 對中。
  4. 在JavaSE中,註解的使用目的比較簡單,例如標記過時的功能,忽略警告等。在JavaEE/Android中註解佔據了更重要的角色,例如用來配置應用程式的任何切面,代替JavaEE舊版中所遺留的繁冗程式碼和XML配置等。
  5. 未來的開發模式都是基於註解的。
    1. JPA是基於註解的
    2. Spring2.5以 上都是基於註解的
    3. Hibernate3.x以後也是基於註解的
    4. 現在的 Struts2有一部分也是基於註解的了
    5. 註解是一種趨勢,一定程度上可以說:框架 = 註解 + 反射 + 設計模式

二、註解應用示例

1、示例一:生成文件相關的註解

2、示例二:在編譯時進行格式檢查(JDK內建的三個基本註解)

  1. @Override:此註解只能用於方法,用於限定重寫父類的方法。(不加@Override照樣可以重寫,只是不會在編譯時校驗。)
  2. @Deprecated:用於表示所修飾的元素(類、方法等)已過時。
  3. @SuppressWarnings:抑制編譯器警告

3、示例三:跟蹤程式碼依賴性,實現替代配置檔案功能

三、自定義註解

  1. 程式碼實現

    public @interface MyAnnotation {
        String value() default "lzx";
    }
    
  2. 說明

    1. 定義新的 Annotation 型別使用 @interface 關鍵字
    2. Annotation 的成員變數在 Annotation 定義中以無引數方法的形式來宣告。其方法名和返回值定義了該成員的名字和型別。我們稱為配置引數。型別只能 是八種基本資料型別 、String型別 、 Class型別 、 enum型別 、 Annotation 型別 、 以上所有型別的陣列
    3. 可以在定義 Annotation 的成員變數時為其指定初始值, 指定成員變數的初始值可使用 default 關鍵字
    4. 如果只有一個引數成員,建議使用引數名為value
    5. 如果定義的註解含有配置引數,那麼使用時必須指定引數值,除非它有預設值。格式是“引數名 = 引數值”,如果只有一個引數成員,且名稱為value, 可以省略“value=”
    6. 沒有成員定義的 Annotation 稱為標記; 包含成員變數的 Annotation 稱為後設資料 Annotation
    7. 自定義註解必須配上註解的資訊處理流程(使用反射)才有意義

四、JDk中的元註解

1、理解

  1. 對現有註解進行修飾的註解,叫元註解
  2. 對現有資料進行修飾的資料叫後設資料。例如,註解中String name = "lzx",String name就是後設資料

2、元註解

  1. Retention

    1. 用於指定Annotation的宣告週期
    2. @Rentention 包含一個 RetentionPolicy 型別的成員變數, 使用 @Rentention 時必須為該 value 成員變數指定值:
      1. RetentionPolicy.SOURCE:在原始檔中有效(即原始檔保留),編譯器直接丟棄這種策略的註釋
      2. RetentionPolicy.CLASS:在class檔案中有效(即class保留) , 當執行 Java 程式時, JVM 不會保留註解。 這是預設值
      3. RetentionPolicy.RUNTIME:在執行時有效(即執行時保留),當執行 Java 程式時, JVM 會保留註釋。程式可以通過反射獲取該註釋
  2. Target

    1. 指定被修飾的 Annotation 能用於 修飾哪些程式元素

    在這裡插入圖片描述

  3. Documented:指定被該元 Annotation 修飾的 Annotation 類將被 javadoc 工具提取成文件。預設情況下,javadoc是不包括註解的

  4. Inherited:被它修飾的 Annotation 將具有繼承性。如果某個類使用 @Inherited 修飾的 Annotation, 則其子類將自動具有該註解

五、利用反射獲取註解資訊

(後續學到反射補充)

六、JDK8中註解新特性(瞭解)

1、可重複註解

2、可用於型別的註解

相關文章