1. 程式人生 > 其它 >spring之自定義註解

spring之自定義註解

java.lang.annotation提供了四種元註解,專門註解其他的註解:
@Target –註解用於什麼地方,預設值為任何元素,表示該註解用於什麼地方。可用的ElementType指定引數 ,也同時指定多個 
  ● ElementType.CONSTRUCTOR:用於描述構造器
  ● ElementType.FIELD:成員變數、物件、屬性(包括enum例項)
  ● ElementType.LOCAL_VARIABLE:用於描述區域性變數
  ● ElementType.METHOD:用於描述方法
  ● ElementType.PACKAGE:用於描述包
  ● ElementType.PARAMETER:用於描述引數
  ● ElementType.TYPE:用於描述類、介面(包括註解型別) 或enum宣告



@Retention –什麼時候使用該註解,即註解的生命週期,使用RetentionPolicy來指定
  ●   RetentionPolicy.SOURCE : 在編譯階段丟棄。這些註解在編譯結束之後就不再有任何意義,所以它們不會寫入位元組碼。@Override, @SuppressWarnings都屬於這類註解。
  ●   RetentionPolicy.CLASS : 在類載入的時候丟棄。在位元組碼檔案的處理中有用。註解預設使用這種方式
  ●   RetentionPolicy.RUNTIME : 始終不會丟棄,執行期也保留該註解,因此可以使用反射機制讀取該註解的資訊。我們自定義的註解通常使用這種方式。


@Documented –註解是否將包含在JavaDoc中

@Inherited – 是否允許子類繼承該註解
 @Inherited 元註解是一個標記註解,@Inherited闡述了某個被標註的型別是被繼承的。如果一個使用了@Inherited修飾的annotation型別被用於一個class,則這個annotation將被用於該class的子類。
自定義註解類編寫的一些規則:

        Annotation型定義為@interface, 所有的Annotation會自動繼承java.lang.Annotation這一介面,並且不能再去繼承別的類或是介面.
        引數成員只能用public或預設(default)這兩個訪問權修飾
        引數成員只能用基本型別byte,short,char,int,long,float,double,boolean八種基本資料型別和String、Enum、Class、annotations等資料型別,以及這一些型別的陣列.
        要獲取類方法和欄位的註解資訊,必須通過Java的反射技術來獲取 Annotation物件,因為你除此之外沒有別的獲取註解物件的方法
        註解也可以沒有定義成員