我們在使用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入口類