Java註解Annotation(一)

Java註解Annotation(一)——簡介java

這一章首先簡單介紹一下註解,下一章會給出一個註解應用的DEMO。數組

1. 元註解

元註解的做用是負責註解其餘的註解。工具

JDK1.5中,定義了4個標準的meta-annotation元註解類型,他們被用來提供對其它annotation註解類型做說明。spa

  1. @Target
  2. @Retention
  3. @Documented
  4. @Inherited

這些類型和它們所支持的類在java.lang.annotation包中能夠找到。code

@Target

@Target說明了Annotation所修飾的對象範圍。Annotation可被用於packages,types(類,接口,枚舉,Annotation類型等),類型成員(方法,構造方法,成員變量,枚舉值),方法參數和本地變量(如循環變量,catch參數)。在Annotation類型的聲明中使用了target可更加明晰其修飾的目標。對象

做用:用於描述註解的使用範圍,即被描述的註解能夠用在什麼地方。blog

取值(ElementType):繼承

1. CONSTRUCTOR,用於描述構造器接口

2. FIELD:用於描述域生命週期

3. LOCAL_VARIABLE:用於描述局部變量

4. METHOD:用於描述方法

5.PACKAGE:用於描述包

6. PARAMETER:用於描述參數

7. TYPE:用於描述類,接口或枚舉等類型

@Retention

@Retention定義了該Annotation註解被保留的時間擦汗你高端,某些Annotation僅出如今源碼中,而被編譯器丟棄,而另外一些卻被編譯在class文件中;編譯在class文件中的Annotation可能會被虛擬機忽略,而另外一些在class被裝載時將被讀取(請注意並不影響class的執行,由於Annotation與class在使用上是被分離的)。

做用:表示須要在什麼級別保存該註釋信息,用於描述註解的生命週期,即被描述的註解在什麼範圍內有效。

取值(RetentionPoicy):

1. SOURCE:在源文件中有效

2. CLASS:在class文件中有效

3. RUNTIME:在運行時有效

註解的RetentionPolicy的屬性值是RUNTIME,這樣註解處理器能夠經過反射,獲取到該註解的屬性值,從而去作一些運行時的邏輯處理。

@Documented

@Documented用於描述其它類型的annotation應該被做爲被標註的程序成員的公共API,所以能夠被例如javadoc此類的工具文檔化。Documented是一個標記註解,沒有成員。

@Inherited

@Inherited元註解是一個標記註解,@Inherited闡述了某個被標註的類型是被繼承的,註解類型被自動繼承。若是一個使用了@Inherited修飾的annotation類型被用於一個class,則這個annotation將被用於該class的子類

注意:@Inherited annotation類型是被標註過的class的子類所繼承。類並不從它所實現的接口繼承annotation,方法並不從它所重載的方法繼承annotatiaon。

2.自定義註解

使用@interface自定義註解時,自動集成了java.lang.annotation.Annotation接口,由編譯程序自動完成其餘細節。在定義註解時,不能繼承其餘的註解或接口。@interface用來聲明一個註解,其中的沒一個方法其實是聲明瞭一個配置參數。方法的名稱就是參數的名稱,返回值類型就是參數的類型。能夠經過default來聲明參數的默認值。

自定義註解的格式:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interfaces Demo {
  public String value() default "demo";
}

 

上面的代碼,說明了@Demo這個自定義註解在使用的時候,只能註解FIELD,即類的屬性,只能在運行時纔會起做用。其中註解中的方法默認會返回字符串"demo"。

參數的可支持的數據類型:

  • 全部基本數據類型
  • String類型
  • Class類型
  • enum類型
  • Annotation類型
  • 以上全部類型的數組

Annotation類型裏面的參數的設定:

  1. 只能用public或者默認default這兩個訪問權修飾
  2. 參數成員的類型只能是上述幾種。
  3. 若是隻有一個參數成員,最好把參數名稱設爲"value",如上述代碼。

註解元素的默認值:

註解元素必須有肯定的值,要麼在定義註解的默認值中指定,要麼在使用註解時指定,非基本類型的註解元素的值不可爲null。所以,使用空字符串或0做爲默認值是一種經常使用的作法。這個約束使得處理器很難表現一個元素的存在或者缺失的炸ungtai,由於每一個註解的聲明中,全部元素都存在,而且都具備相應的值,爲了繞開這個約束,咱們只能定義一些特殊的值,例如空字符串或者負數,一次表示某個元素不存在,在定義註解時,這已經成爲一個習慣用法。

3.註解處理器

在聲明瞭註解hiro,咱們要對註解註釋的方法進行處理。

註解處理器類庫:

java.lang.reflect.AnnotatedElement
相關文章
相關標籤/搜索