1. 程式人生 > >java中註解的原理和實現機制

java中註解的原理和實現機制

                                            java中註解的實現原理和機制

一.什麼是註解:

     註解是標記,也可以理解成是一種應用在類、方法、引數、屬性、構造器上的特殊修飾符。註解作用有以下三種:

       第一種:生成文件,常用的有@[email protected]

等。

       第二種:替代配置檔案的作用,尤其是在spring等一些框架中,使用註解可以大量的減少配置檔案的數量。

       第三種:檢查程式碼的格式,如@Override,標識某一個方法是否覆蓋了它的父類的方法。

二.註解的底層實現原理:

       註解的底層也是使用反射實現的,我們可以自定義一個註解來體會下。註解和介面有點類似,不過申明註解類需要加上@interface,註解類裡面,只支援基本型別、String及列舉型別,裡面所有屬性被定義成方法,並允許提供預設值。

       java 5.0開始,在java.lang.annotations中提供了四種元註解,專門註解其他的註解:

    @Target?  — —註解用於什麼地方

    TYPE,  //給類(型)註解
    FIELD, //給欄位註解,不要忘了,欄位可以是物件
    METHOD, //給方法註解
    PARAMETER, //給引數註解
    CONSTRUCTOR, //給構造方法註解
    LOCAL_VARIABLE, //給區域性變數註解
    ANNOTATION_TYPE,//給註解註解(這貌似把自己不當類來看)
    PACKAGE, //給包註解

   @Retention — —註解執行狀態

   SOURCE, //原始碼狀態執行,
   CLASS, //編譯類檔案時執行
   RUNTIME //執行時執行

   @Documented — — 生成說明文件,新增類的解釋 

   @Inherited — —允許子類繼承父類中的註解。

   我們自定義一個註解來感受下:

定義註解類:

  @Target({ElementType.TYPE})
  @Retention(RetentionPolicy.RUNTIME)
  @Documented
  public @interface User {
     String name() default "張三";
  }

由於我們的註解是類註解,所以我們建立一個類

@User
 public class test {
}

到了這裡,註解可能還沒起什麼作用。我們需要通過反向代理去讀取類中定義的註解,讀出來使用就簡單了。

建立測試類,來讀取:

public class testamin {
public static void main(String[] args) throws ClassNotFoundException{
        Class<?> classTest=Class.forName("com.test.test");
        Annotation[] ann=classTest.getAnnotations();
        for(Annotation aa:ann){
            User u=(User)aa;
            System.out.println(u.name());
        }
     }
}


控制檯輸出了我們定義的註解,註解的初識就介紹到這裡吧。