序言
@Retention 註解是用來註解的註解,稱爲元註解,其作用可以簡單理解爲設置註解的生命週期。
@Retention 註解傳入的是 RetentionPolicy 枚舉,該枚舉有三個常量,分別是 SOURCE、CLASS 和 RUNTIME
三者區別如下:
- SOURCE 代表着註解僅保留在源級別中,編譯器將Java文件編譯成class文件時將之遺棄。
- CLASS 代表着註解被保留在class文件中,JVM加載class文件時將之遺棄。
- RUNTIME 代表着標記的註解會由JVM保留,因此運行時環境可以使用它。
關係:RUNTIME>CLASS>SOURCE
一般來說,我們自己定義的註解都是 RUNTIME 級別的,因爲大多數情況我們是根據運行時環境去做一些處理。
而只要自定義的註解中**@Retention** 註解設置爲 SOURCE 和 CLASS 這倆個級別,那麼就需要繼承 AbstractProcessor 並實現 process 方法,
因爲 SOURCE 和 CLASS 這倆個級別等加載到JVM的時候註解就被抹除了。