1、@inherited
@Inherited 註解定義在Java的java.lang.annotation包中,是Java標準庫的一部分。它用於修飾註解,以改變這些註解的預設繼承行為。
預設情況下,Java中的註解是不被繼承的。也就是說,如果一個類上使用了某個註解,那麼它的子類不會自動繼承這個註解。但是,透過使用@Inherited註解來修飾某個註解,可以使得這個註解具有被繼承的特性。
當一個註解被@Inherited修飾後,如果一個類上使用了這個註解,那麼它的所有子類(直接子類和間接子類)都會繼承這個註解。但是,需要注意的是,這種繼承行為僅適用於類級別的註解,不適用於方法、欄位或建構函式級別的註解。此外,介面上的註解即使被@Inherited修飾,其實現類也不會繼承這個註解。
2、@interface
@interface 在Java程式語言中是一個關鍵字,它用於定義一個註解(Annotation)。註解是一種應用於類、方法、引數、變數、構造器和包等Java元素的特殊標記,這些標記可以在編譯時、載入時或執行時被訪問,並被用於為這些元素提供後設資料。
以下是關於@interface的一些關鍵點:
定義註解:
使用@interface關鍵字可以定義一個註解。註解的名稱通常使用大寫字母開頭,以區別於介面(interface)和其他Java識別符號。
元素(Element):
註解內部可以定義一些元素(也稱為成員變數),這些元素在註解被使用時需要提供值。元素可以有預設值,也可以沒有預設值。元素的型別通常是基本資料型別、String、Class、enum、註解型別、以及這些型別的陣列。
元註解(Meta-Annotation):
註解本身也可以被註解,這些用於註解其他註解的註解被稱為元註解。Java提供了幾個內建的元註解,包括@Retention、@Target、@Documented、@Inherited和@Repeatable。
@Retention:指定註解的保留策略,可以是SOURCE(只在原始碼中保留,編譯時被丟棄)、CLASS(在原始碼和.class檔案中保留,但在執行時不會被VM保留)或RUNTIME(在原始碼、.class檔案和執行時都保留,因此可以透過反射訪問)。
@Target:指定註解可以應用的Java元素型別,如類、方法、欄位等。
@Documented:指示帶有該註解的元素應該被javadoc工具記錄。
@Inherited:使註解具有繼承性,但僅適用於類級別的註解。
@Repeatable:指示註解可以重複應用在同一元素上。
使用註解:
註解是透過在目標元素前加上@符號和註解名稱來使用的。如果註解有元素,則需要在註解名稱後的括號中提供元素的值。如果元素有預設值,則可以省略該元素的值。
處理註解:
註解本身不直接影響操作,它們需要透過某種方式被讀取和處理。這通常是透過使用Java反射API來實現的。在執行時,可以檢查類、方法、欄位等上的註解,並根據這些註解的值來執行特定的邏輯。
3、@order()
在Java中,@Order 註解通常不是Java標準庫的一部分,而是由Spring框架或其他一些框架提供的。它用於定義元件(如Bean、配置類、方法等)的載入或執行順序。
@Order 註解接受一個整數作為引數,這個整數表示元件的優先順序。數值越小,優先順序越高,元件將越早被載入或執行。如果兩個元件具有相同的順序值,則它們的載入或執行順序是不確定的。
當你看到 @Order(2) 這樣的註解時,它意味著被註解的元件具有一個相對較低的優先順序(假設其他元件可能使用了更小的數字,如 @Order(1))。