这个接口的主要作用就是找出类上标注的注解和注解的名称。
此接口在1.6中有四个方法,(1.8中又添加了几个方法,都差不多)
<T extends Annotation> T getAnnotation(Class<T> annotationClass)
如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null。
Annotation[] getAnnotations()
返回此元素上存在的所有注释。
Annotation[] getDeclaredAnnotations()
返回直接存在于此元素上的所有注释。
boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
如果指定类型的注释存在于此元素上,则返回 true,否则返回 false。
以下通过示例解释
先定义自定义注解,如果对自定义注解不了解请点击深入理解Java:注解(Annotation)自定义注解入门
写main方法测试
Controller注解类
package com.hldh.test;
import java.lang.annotation.*;
/**
* Created by liuhj on 2015/11/16.
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface Controller {
String value() default "index";
}
然后写测试类MainTest.java
package com.hldh.test;
import java.lang.annotation.Annotation;
/**
* Created by liuhj on 2015/11/16.
* 测试查找自定义注解
*/
public class MainTest {
public static void main(String args[]){
try{
//加载一个包含注解的类
Class<?> clazz = Class.forName("com.hldh.test.IndexController");
//判断是否有某类型的注解,如果有,返回注解,没有返回空
Controller controller = clazz.getAnnotation(Controller.class);
System.out.println(controller); //@com.hldh.test.Controller(value=index)
System.out.println(controller.value()); //返回controller注解的默认值 index
//返回此元素上存在的所有注释。
Annotation[] a = clazz.getAnnotations();
for(Annotation annotation :a){
System.out.println(annotation); //@com.hldh.test.Controller(value=index ) @com.hldh.test.RequestMapping(value=name)
}
//是否有指定类型的注解存在于类上
System.out.println(clazz.isAnnotationPresent(Controller.class)); //true 包含controller注解
//获得直接作用于此类的注解,继承的注解得不到
Annotation[] a1 = clazz.getDeclaredAnnotations();
for(Annotation annotation :a1){
System.out.println(annotation); //@com.hldh.test.Controller(value=index ) @com.hldh.test.RequestMapping(value=name)
}
}catch (Exception e){
e.printStackTrace();
}
}
}
第四个方法获取直接作用于此类的注解,这里面涉及了注解的继承,参考子类可以继承到父类上的注解吗--有结论了。