序言
@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的時候註解就被抹除了。
資料
Java元註解之 @Retention