方法名 | 作用 |
---|---|
<A extends Annotation> A getAnnotation(Class<A> annotationClass) | 如果該元素存在 annotationClass 型別的註解,則返回註解,否則返回 null |
<A extends Annotation> A getDeclaredAnnotation(Class<A> annotationClass) | 這是 Java 8 新增的方法,該方法嘗試獲取直接修飾該程式元素、指定型別的註解。如果該型別的註解不存在,則返回 null |
Annotation[] getAnnotations() | 返回該元素上存在的所有註解 |
Annotation[] getDeclaredAnnotations() | 返回直接存在於該元素的所有註解(和 getAnnotations() 的區別在於該方法將不返回繼承的注釋) |
boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) | 判斷該元素上是否存在 annotationClass 型別的註解,如果存在則返回 true,否則返回 false。 |
<A extends Annotation> A[] getAnnotationsByType(Class<A> annotationClass) | 該方法與前面介紹的 getAnnotation() 方法基本相似。但由於 Java 8 增加了重複註解功能,因此需要使用該方法獲取該元素存在 annotationClass 型別的多個註解。 |
<A extends Annotation> A[] getDeclaredAnnotationsByType(Class<A> annotationClass) | 該方法與前面介紹的 getDeclaredAnnotations() 方法基本相似。但由於 Java 8 增加了重複註解功能,因此需要使用該方法獲取該元素存在 annotationClass 型別的多個註解。 |
為了獲得程式中的元素(如類、方法等),必須使用反射知識,如果不了解 Java 反射,可先閱讀學習《Java反射機制是什麼?Java反射機制的基本概念》一節。
@RequestMapping(value="")
註解,這樣 Spring 就會將我們填寫的 value 值當作路徑存放在 map 結構中讓我們存取。下面我們使用 getAnnotation() 方法來實現這個功能,程式碼如下。
/** * 這是自定義注解的類 */ @Target({ ElementType.TYPE, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyRequestMapping { String value(); // 這是註解的一個屬性欄位,也就是在使用註解時填寫在括號裡的引數 }建立 TestController 類,然後在 TestController 類中使用 @MyRequestMapping 註解,程式碼如下:
@MyRequestMapping("/test") public class TestController { public void test() { System.out.println("進入Test方法"); } }測試類程式碼如下:
public class Test { public static void main(String[] args) { Class<?> c = TestController.class; MyRequestMapping baseRequestMapping = c.getAnnotation(MyRequestMapping.class); System.out.println(baseRequestMapping.value()); // 輸出value的值 } }輸出結果為
/test
。?
改成要限定的型別,但是必須要寫這個泛型限定才行,否則會編譯錯誤。
@Target({ ElementType.TYPE }) @Inherited @Retention(RetentionPolicy.RUNTIME) public @interface Person { String value(); }2)修改例 1 中的 TestController 類,程式碼如下:
@MyRequestMapping("/test") @Person("C") public class TestController { public void test() { System.out.println("進入Test方法"); } }3)建立測試類,獲取 TestController 類裡的所有註解,並將這些註解列印出來。程式碼如下所示:
public class Test { public static void main(String[] args) { Class<?> c = TestController.class; Annotation[] atnsArray = c.getAnnotations(); for (Annotation an : atnsArray) { System.out.println(an); } } }輸出結果為:
@MyRequestMapping(value=/test)
@Person(value=C)