在現在的開發中,註解越來越多地應用到了開發中,無論是Servlet3.0新特性,還是SSH中的全註解,都給開發帶來了極大的便利, 直觀. 因此需要對註解有深入的理解.
一. 自訂註解
自訂註解的目標:原來寫在設定檔中的資訊,可以通過註解描述
定義Annotation 使用 @interface 關鍵字
設定檔的資訊,在註解中採用屬性描述
例:String name();
帶預設值的方式:String name() default “xxx”
註解屬性的類型只能是如下類型:
String類型
8大基礎資料型別 (Elementary Data Type)
Class類型
枚舉類型
註解類型
以上類型的一維數組
特殊屬性value:如果註解中有一個名稱value的屬性,那麼使用註解時可以省略value=部分,如@MyAnnotation(“xxx")
特殊屬性value[];
二. JDK 的元 Annotation
2.1 元 Annotation指修飾Annotation的Annotation
JDK中定義了如下元Annotation:
@Retention: 只能用於修飾一個 Annotation 定義, 用於指定該 Annotation 可以保留的域, @Rentention 包含一個 RetentionPolicy 類型的成員變數, 通過這個變數指定域。
RetentionPolicy.CLASS: 編譯器將把註解記錄在 class 檔案中. 當運行 Java 程式時, JVM 不會保留註解. 這是預設值
RetentionPolicy.RUNTIME:編譯器將把注釋記錄在 class 檔案中. 當運行 Java 程式時, JVM 會保留註解. 程式可以通過反射擷取該注釋
RetentionPolicy.SOURCE: 編譯器直接丟棄這種策略的注釋
2.2
@Target:指定註解用於修飾類的哪個成員. @Target 包含了一個名為 value,類型為ElementType的成員變數。
@Documented: 用於指定被該元 Annotation 修飾的 Annotation 類將被 javadoc 工具提取成文檔.
@Inherited: 被它修飾的 Annotation 將具有繼承性.如果某個類使用了被 @Inherited 修飾的 Annotation, 則其子類將自動具有該註解
三. 解析Annotation 資訊
JDK 5.0 在 java.lang.reflect 包下新增了 Annotation 介面, 該介面代表程式中可以接受註解。
當一個 Annotation 類型被定義為運行時 Annotation 後, 該注釋才是運行時可見, 當 class 檔案被載入時儲存在 class 檔案中的 Annotation 才會被虛擬機器讀取
程式可以調用 AnnotationElement 對象的如下方法來訪問 Annotation 資訊:
四. 使用xml檔案還是使用註解進行實際開發:
需要根據實際開發的需求,如果考慮到項目的擴充性,需要使用XML檔案. 若是考慮到開發項目時的便捷,應使用註解.
利與弊:
1. xml文檔 改動配置不需要重新編譯java類. 但XML文檔往往過大,配置繁瑣不直觀,容易打斷開發人員思路
2.註解簡單,便捷,直觀. 但是改動配置時需要將java類重新編譯
實際開發中可衡量XML檔案和註解的利與弊進行選擇.