什麼是註解
1.註解就是Annontation,Annontation是Java5開始引入的新特徵,中文名稱叫做註解,它提供了一種安全的類似註釋的機制,可以起到減少配置的成果,給程式起到輔助性的作用
註解有什麼用處
1.註解可以生成文件
2.註解可以逐漸替代配置
3.在編譯時進行格式檢查
註解的原理:
註解本質是一個繼承了Annotation的特殊介面,其具體實現類是Java執行時生成的動態代理類。而我們通過反射獲取註解時,返回的是Java執行時生成的動態代理物件$Proxy1。通過代理物件呼叫自定義註解(介面)的方法,會最終呼叫AnnotationInvocationHandler的invoke方法。該方法會從memberValues這個Map中索引出對應的值。而memberValues的來源是Java常量池。
自定義註解:
自定義註解類編寫的一些規則:
1. Annotation型定義為@interface, 所有的Annotation會自動繼承java.lang.Annotation這一介面,並且不能再去繼承別的類或是介面.
2. 引數成員只能用public或預設(default)這兩個訪問權修飾
3. 引數成員只能用基本型別byte,short,char,int,long,float,double,boolean八種基本資料型別和String、Enum、Class、annotations等資料型別,以及這一些型別的陣列.
4. 要獲取類方法和欄位的註解資訊,必須通過Java的反射技術來獲取 Annotation物件,因為你除此之外沒有別的獲取註解物件的方法
5. 註解也可以沒有定義成員, 不過這樣註解就沒啥用了
PS:自定義註解需要使用到元註解
自定義註解例項
import java.lang.annotation.Documented; 2 import java.lang.annotation.Retention; 3 import java.lang.annotation.Target; 4 import static java.lang.annotation.ElementType.FIELD; 5 import static java.lang.annotation.RetentionPolicy.RUNTIME; 6 7 /** 8 * 水果名稱註解 9 */ 10 @Target(FIELD) 11 @Retention(RUNTIME) 12 @Documented 13 public @interface FruitName { 14 String value() default ""; 15 }
參考連結:https://www.cnblogs.com/acm-bingzi/p/javaAnnotation.html#undefined