1. 程式人生 > >自定義註解的場景及實現

自定義註解的場景及實現

java中有四種元註解:@Retention、@Inherited、@Documented、@Target

@Retention
註解的保留位置(列舉RetentionPolicy),RetentionPolicy可選值:

SOURCE:註解僅存在於原始碼中,在class位元組碼檔案中不包含
CLASS:預設的保留策略,註解在class位元組碼檔案中存在,但執行時無法獲得
RUNTIME:註解在class位元組碼檔案中存在,在執行時可以通過反射獲取到
@Inherited
宣告子類可以繼承此註解,如果一個類A使用此註解,則類A的子類也繼承此註解

@Documented
宣告註解能夠被javadoc等識別(下面自定義註解處會有例子做介紹,點選檢視)

@Target
用來宣告註解範圍(列舉ElementType),ElementType可選值:

TYPE:介面、類、列舉、註解
FIELD:欄位、列舉的常量
METHOD:方法
PARAMETER:方法引數
CONSTRUCTOR:建構函式
LOCAL_VARIABLE:區域性變數
ANNOTATION_TYPE:註解
PACKAGE:包

自定義註解經常使用場景:

1.生成文件.例如:@see,@param,@return 等

2.代替配置檔案功能.例如spring基於註解的配置

3.在編譯時進行格式檢查。如@override 放在方法前,如果你這個方法並不是覆蓋了超類方法,則編譯時就能檢查出。

不經常使用的場景:

1.類屬性自動賦值

2.驗證物件屬性完整性

 

@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Target({ElementType.FIELD,ElementType.METHOD})
@interface MyAnno{
    public String name() default "zhangsan";
    public String email() default "[email protected]";
}