分類:java基礎->元註解java
demo源碼地址git
首先說明下,java 註解是在jdk1.5 以後出現的github
jdk1.5版本內置了三種標準的註解:編輯器
@Override,表示當前的方法定義將覆蓋超類中的方法。ide
@Deprecated,使用了註解爲它的元素編譯器將發出警告,由於註解@Deprecated是不同意使用的代碼,被棄用的代碼。工具
@SuppressWarnings,關閉不當編輯器警告信息。繼承
Java還提供了4中元註解,專門負責新註解的建立: 這就是要用的願註解(用於定義註解的註解)接口
java 元註解定義:用於定義註解的註解,就是你想自定義註解要使用的註解生命週期
@Target 表示該註解用於什麼地方,可能的值在枚舉類 ElemenetType 中,包括: ElemenetType.CONSTRUCTOR----------------------------構造器聲明 ElemenetType.FIELD --------------------------------------域聲明(包括 enum 實例) ElemenetType.LOCAL_VARIABLE------------------------- 局部變量聲明 ElemenetType.METHOD ----------------------------------方法聲明 ElemenetType.PACKAGE --------------------------------- 包聲明 ElemenetType.PARAMETER ------------------------------參數聲明 ElemenetType.TYPE--------------------------------------- 類,接口(包括註解類型)或enum聲明文檔
@Retention 表示在什麼級別保存該註解信息。可選的參數值在枚舉類型 RetentionPolicy 中,包括:
RetentionPolicy.SOURCE ---------------------------------註解將被編譯器丟棄 RetentionPolicy.CLASS -----------------------------------註解在class文件中可用,但會被VM丟棄 RetentionPolicy.RUNTIME VM-------將在運行期也保留註釋,所以能夠經過反射機制讀取註解的信息。
首 先要明確生命週期長度 SOURCE < CLASS < RUNTIME ,因此前者能做用的地方後者必定也能做用。通常若是須要在運行時去動態獲取註解信息,那隻能用 RUNTIME 註解;若是要在編譯時進行一些預處理操做,好比生成一些輔助代碼(如 ButterKnife),就用 CLASS註解;若是隻是作一些檢查性的操做,好比 @Override 和 @SuppressWarnings,則可選用 SOURCE 註解。
@Documented 將此註解包含在 javadoc 中 ,它表明着此註解會被javadoc工具提取成文檔。在doc文檔中的內容會由於此註解的信息內容不一樣而不一樣。至關與@see,@param 等。
@Inherited 容許子類繼承父類中的註解。
自定義註解實現見源碼