获取注解信息

一、自定义注解java

package com.ljb.app.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * 自定义代成员注解
 * 能够修饰类、方法,保存到运行时,在javadoc中生成文档,子类继承
 * @author LJB
 * @version 2015年3月4日
 */
@Target({ElementType.TYPE,ElementType.METHOD,ElementType.LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyAnnotation {
 // 有默认值
 String name() default "张三";
 
 // 不带默认值
 int age();
}

二、建立获取注解信息类app

package com.ljb.app.annotation;
import java.lang.annotation.Annotation;
/**
 * 获取成员注解信息
 * @author LJB
 * @version 2015年3月5日
 */
public class AnnotationInfo {
 /**
  * @param args
  */
 public static void main(String[] args) {
  AnnotationInfo annInfo = new AnnotationInfo();
  try {
   annInfo.getInfo();
  } catch (SecurityException e) {
   e.printStackTrace();
  } catch (NoSuchMethodException e) {
   e.printStackTrace();
  }
 }
 
 @MyAnnotation(age=21)
 public void getInfo () throws SecurityException, NoSuchMethodException {
  // 获取方法注解
  @MyAnnotation(age=22)
  Annotation[] annos = AnnotationInfo.class.getMethod("getInfo").getAnnotations();
  
  // 遍历
  for (Annotation ann:annos) {
   // 判断注解类型
   if (ann instanceof MyAnnotation) {
    System.out.println("ann is " + ann);
    System.out.println("ann.name() is " + ((MyAnnotation)ann).name());
    System.out.println("ann.age() is " + ((MyAnnotation)ann).age());
   }
  }
 }
}

运行结果:ann is @com.ljb.app.annotation.MyAnnotation(name=张三, age=21)
ann.name() is 张三
ann.age() is 21
spa

相关文章
相关标签/搜索