@Target({ElementType.TYPE,ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyRequestMapping { /** * 表示訪問該方法的url * @return */ String value() default ""; }
Retention註解java
Retention(保留)註解說明,這種類型的註解會被保留到那個階段. 有三個值: 1.RetentionPolicy.SOURCE —— 這種類型的Annotations只在源代碼級別保留,編譯時就會被忽略 2.RetentionPolicy.CLASS —— 這種類型的Annotations編譯時被保留,在class文件中存在,但JVM將會忽略 3.RetentionPolicy.RUNTIME —— 這種類型的Annotations將被JVM保留,因此他們能在運行時被JVM或其餘使用反射機制的代碼所讀取和使用.app
下面示例中, @Retention(RetentionPolicy.RUNTIME)註解代表 Test_Retention註解將會由虛擬機保留,以便它能夠在運行時經過反射讀取.工具
Documented 註解url
Documented 註解代表這個註解應該被 javadoc工具記錄. 默認狀況下,javadoc是不包括註解的. 但若是聲明註解時指定了 @Documented,則它會被 javadoc 之類的工具處理, 因此註解類型信息也會被包括在生成的文檔中.(我的觀點:不是重點,瞭解便可。勿噴)code
Target註解對象
@Target說明了Annotation所修飾的對象範圍:Annotation可被用於 packages、types(類、接口、枚舉、Annotation類型)、類型成員(方法、構造方法、成員變量、枚舉值)、方法參數和本地變量(如循環變量、catch參數)。在Annotation類型的聲明中使用了target可更加明晰其修飾的目標。 做用:用於描述註解的使用範圍(即:被描述的註解能夠用在什麼地方) 取值(ElementType)有:繼承
1.CONSTRUCTOR:用於描述構造器 2.FIELD:用於描述域 3.LOCAL_VARIABLE:用於描述局部變量 4.METHOD:用於描述方法 5.PACKAGE:用於描述包 6.PARAMETER:用於描述參數 7.TYPE:用於描述類、接口(包括註解類型) 或enum聲明接口
Inherited 註解文檔
這是一個稍微複雜的註解類型. 它指明被註解的類會自動繼承. 更具體地說,若是定義註解時使用了 @Inherited 標記,而後用定義的註解來標註另外一個父類, 父類又有一個子類(subclass),則父類的全部屬性將被繼承到它的子類中.get