天天看點

Java深入 - 深入 Java自己定義注解

我們在使用spring架構的時候,會常常使用類似:@autowired 這種注解。

我們也能夠自定義一些注解。java的注解主要在包:java.lang.annotation中實作。

什麼是元注解?你能夠這樣了解。元注解是自己定義注解的注解。

元注解主要包括4個。

他們主要在java.lang.annotation中能夠找到。

我們自己要建立注解的時候必需要用到這些元注解。

是以必須徹底了解這四個元注解的含義。

1. @documented

2. @inherited

3. @retention

4. @target

比如:

@documented用于描寫叙述其他類型的annotation應該被作為被标注的程式成員的公共api,是以能夠被比如javadoc此類的工具文檔化。

documented是一個标記注解,沒有成員。

@inherited 元注解是一個标記注解。@inherited闡述了某個被标注的類型是被繼承的。

假設一個使用了@inherited修飾的annotation類型被用于一個class,則這個annotation将被用于該class的子類。

@target說明了annotation所修飾的對象範圍:annotation可被用于 packages、types(類、接口、枚舉、annotation類型)、類型成員(方法、構造方法、成員變量、枚舉值)、方法參數和本地變量(如循環變量、catch參數)。

elementtype.constructor  作用于構造器

elementtype.field  作用于域/屬性

elementtype.local_variable  用于描寫叙述局部變量

elementtype.method  作用于方法

elementtype.package   用于描寫叙述包

elementtype.parameter   用于描寫叙述參數

elementtype.type   用于描寫叙述類、接口(包含注解類型) 或enum聲明,最經常使用

單個修飾對象的範圍:

多個:

定義了該annotation被保留的時間長短:某些annotation僅出如今源碼中,而被編譯器丢棄。而還有一些卻被編譯在class檔案裡;編譯在class檔案裡的annotation可能會被虛拟機忽略。而還有一些在class被裝載時将被讀取(請注意并不影響class的運作,由于annotation與class在使用上是被分離的)。使用這個meta-annotation能夠對 annotation的“生命周期”限制。

retentionpolicy.runtime 注解會在class位元組碼檔案裡存在,在執行時能夠通過反射擷取到

retentionpolicy.class 預設的保留政策。注解會在class位元組碼檔案裡存在,但執行時無法獲得

retentionpolicy.source 注解僅存在于源代碼中,在class位元組碼檔案裡不包括

1. 建立一個注解類

2. 建立一個test類

3. 測試類

4. 輸出:

1. 自己定義注解類

2. 建立一個使用注解的類

3. 建立main入口

1. 建立一個自己定義注解

3. 建立main入口類