自定義註解的場景及實現
阿新 • • 發佈:2018-12-29
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]"; }