一、自定义注解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 21spa