深入理解註解(Annotation)

來源:互聯網
上載者:User

在現在的開發中,註解越來越多地應用到了開發中,無論是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檔案和註解的利與弊進行選擇.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.