JDK1.6 java.lang.reflect 接口 AnnotatedElement探究

这个接口的主要做用就是找出类上标注的注解和注解的名称。html

此接口在1.6中有四个方法,(1.8中又添加了几个方法,都差很少)java

<T extends Annotation>  T  getAnnotation(Class<T> annotationClass) app

         若是存在该元素的指定类型的注释,则返回这些注释,不然返回 null。 测试

Annotation[] getAnnotations() spa

         返回此元素上存在的全部注释。 code

Annotation[] getDeclaredAnnotations() htm

         返回直接存在于此元素上的全部注释。 blog

boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) 继承

         若是指定类型的注释存在于此元素上,则返回 true,不然返回 false。 接口

如下经过示例解释

  1. 先定义自定义注解,若是对自定义注解不了解请点击深刻理解Java:注解(Annotation)自定义注解入门

  2. 写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();
        }

    }
}


第四个方法获取直接做用于此类的注解,这里面涉及了注解的继承,参考子类能够继承到父类上的注解吗--有结论了

相关文章
相关标签/搜索