「SpringBoot 相關注解」@Retention 元註解

@Retention 介紹

Retention.java 類位於 JDK 的 rt.jar 內,屬於一個 JDK 註解

它是用來修飾註解的,是註解的註解,稱之爲元註解

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
    RetentionPolicy value();
}

@Retention 作用

該註解是定義被它所註解的註解保留多久,內部有一個枚舉類型的屬性 RetentionPolicy

該枚舉有 3 個可選值 SOURCECLASSRUNTIME

public enum RetentionPolicy {
    /**
     * 註解保留在源文件,當  Java 文件編譯成 class 文件的時候,註解將被編譯器廢棄
     */
    SOURCE,
    /**
     * 註解被保留到 class 文件,但在 jvm 加載 class 文件的是時候被廢棄(默認屬性)
     */
    CLASS,
    /**
     * 註解將被記錄在由編譯器的類文件,並在運行時由虛擬機保留
     */
    RUNTIME
}

@Retention 屬性選擇

  • 如果需要在運行時動態獲取註解信息,只能用 RUNTIME
  • 如果要在編譯時進行一些預處理操作,就用 CLASS
  • 如果僅僅做一些檢查的操縱,則用 SOURCE

如下爲使用不同屬性的註解示例

@Import 註解使用 RUNTIME

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import {
    Class<?>[] value();
}

@Immutable 註解使用 CLASS

@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.CLASS)
public @interface Immutable {
}

@Override 註解使用 SOURCE

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章