JAVA註解(Annotation)相關學習筆記

1、元註解:

        元註解的做用就是負責註解其餘註解。Java5.0定義了4個標準的meta-annotation類型,它們被用來提供對其它 annotation類型做說明。Java5.0定義的元註解:java

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

@Target({ElementType.METHOD,ElementType.Type})

    用於說明該註解的做用域.基本上囊括了全部地方:ElementType可選數組

  • CONSTRUCTOR   --構造方法聲明
  • FIELD     -- 字段聲明
  • LOCAL_VARIABLE   --局部變量聲明
  • METHOD    --方法聲明
  • PACKAGE   --參數聲明
  • TYPE    --類,接口

 

 @Retention(RetentionPlicy.RUNTIME)

    該元註解用於聲明註解的生命週期:RetentionPlicy 可選函數

  • SOURCE   --只在源碼顯示,編譯時會丟棄
  • CLASS    --編譯時會記錄到class中,運行時忽略
  • RUNTIME     --運行時存在,能夠經過反射讀取

@Inherited

    標註性註解,代表該註解是否容許被子註解繼承ui

@Documented

    生成javadoc時會包含該註解spa

 

2、自定義註解

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

    定義註解格式:

        public @interface 註解名 {定義體}code

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

  1. 全部基本數據類型(int,float,boolean,byte,double,char,long,short)
  2. String類型
  3. Class類型
  4. enum類型
  5. Annotation類型
  6. 以上全部類型的數組

例如:繼承

/**
 * 水果顏色註解
 * @author peida
 *
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitColor {
    /**
     * 顏色枚舉
     * @author peida
     *
     */
    public enum Color{ BULE,RED,GREEN};
    
    /**
     * 顏色屬性
     * @return
     */
    Color fruitColor() default Color.GREEN;

}

 

3、解析註解

    概念:經過反射獲取類,函數或成員上的運行時註解信息,從而實現動態控制程序運行的邏輯接口

  1. 使用類加載器加載類  c = Class.forName("")
  2. 找到類上面的註解該類上是否存在Description這個註解   boolean isExist = c.isAnnotationPresent(Description.class)
  3. 拿到註解實例   Description d = (Description)c.getAnnotation(Description.class)
  4. 找到方法上的註解  Method[] ms = c.getMethods
相關文章
相關標籤/搜索