1. 程式人生 > 其它 >學習SpringBoot過程中看到的註解

學習SpringBoot過程中看到的註解

技術標籤:後端spring boot

@Target註解

  1. 作用域:
  • @Target(ElementType.TYPE)——介面、類、列舉、註解
  • @Target(ElementType.FIELD)——欄位、列舉的常量
  • @Target(ElementType.METHOD)——方法
  • @Target(ElementType.PARAMETER)——方法引數
  • @Target(ElementType.CONSTRUCTOR) ——建構函式
  • @Target(ElementType.LOCAL_VARIABLE)——區域性變數
  • @Target(ElementType.ANNOTATION_TYPE)——註解
  • @Target(ElementType.PACKAGE)——包
  • @Target(ElementType.TYPE_PARAMETER)——型別引數宣告,JavaSE8引進,可以應用於類的泛型宣告之處
  • @Target(ElementType.TYPE_USE)——JavaSE8引進,此型別包括型別宣告和型別引數宣告,是為了方便設計者進行型別檢查,例如,如果使用@Target(ElementType.TYPE_USE)對@NonNull進行標記,則型別檢查器可以將@NonNull class C {…} C類的所有變數都視為非null
  1. 其中的ElementType是個列舉,列出了各種情況;@Target註解常用於自定義註解時標註作用範圍;一起配套使用的還有@Retention註解;
  2. 如果一個註解沒有指定@Target註解,則此註解可以用於除了TYPE_PARAMETER和TYPE_USE以外的任何地方;
  3. @Target可以指定多個值,形式如:@Target({ElementType.PACKAGE,ElementType.METHOD})
  4. 如果註解放到不是自己作用域的位置,會提示not applicable to type不適用於型別
  5. ElementType.PACKAGE關於包作用域註解,提示Package annotations should be in file package-info.java,可以參考以下連結:

https://www.cnblogs.com/lijingran/p/8586274.html#top

@Retention註解

  1. 註解的保留位置
  • RetentionPolicy.SOURCE:這種型別的Annotations只在原始碼級別保留,編譯時就會被忽略,在class位元組碼檔案中不包含。
  • RetentionPolicy.CLASS:這種型別的Annotations編譯時被保留,預設的保留策略,在class檔案中存在,但JVM將會忽略,執行時無法獲得。
  • RetentionPolicy.RUNTIME:這種型別的Annotations將被JVM保留,所以他們能在執行時被JVM或其他使用反射機制的程式碼所讀取和使用。

@Document註解

  • 說明該註解將被包含在javadoc中;如果沒有@Document預設註解資訊不會包含在Javadoc中

@Inherited註解

  • 說明子類可以繼承父類中的該註解

@Component註解

  • 標註一個類為Spring容器中的一個bean;將普通的pojo物件作為一個元件交給Spring去管理;
  • 官方說明為:generic stereotype for any Spring-managed component(任何spring管理元件的通用原型)
  • 需要搭配 component-scan 使用

@Configuration註解

  • @Configuration本質還是@Component
  • 代表當前類是一個配置類
  • 程式碼如下:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
    @AliasFor(
        annotation = Component.class
    )
    String value() default "";
	//動態代理
    boolean proxyBeanMethods() default true;
}

@ComponentScan註解

  • 定義掃描的路徑從中找出標識了需要裝配的類自動裝配到spring的bean容器中;

@bean註解

  • 當前類是個元件

@ConfigurationProperties註解

  • 通過prefix獲取指定yaml檔案中的元素的值,和@Value方式作用一樣,優點是不用挨個書寫,方便;
  • 駝峰式寫法yaml中的last-test: lastname對應實體中的lastTest
  • ignoreInvalidFields屬性預設是false;為true時會忽略yaml中錯誤的值,給目標屬性繫結值為null,避免異常導致專案啟動失敗
  • ignoreUnknownFields屬性預設為true;如果為false的時候,會通過拋異常的方式提示刪除掉yaml中多餘的屬性;
    和@Value的對比

@Value註解

  • 通過SPEL取值
  • 和@ConfigurationProperties註解互補