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

    }
}


第四個方法獲取直接做用於此類的註解,這裏面涉及了註解的繼承,參考子類能夠繼承到父類上的註解嗎--有結論了

相關文章
相關標籤/搜索