自定义注解类 @Retention(value=RetentionPolicy.RUNTIME)//元注解①public @interface MyTest {}①元注解:Java中用来修饰其他注释的注释/*@Retention(value=RetentionPolicy.RUNTIME)方法内传入一个枚举分别有三个值
@Retention(value=RetentionPolicy.RUNTIME)//元注解① public @interface MyTest { } ①元注解:Java中用来修饰其他注释的注释 /* @Retention(value=RetentionPolicy.RUNTIME) 方法内传入一个枚举分别有三个值 RetentionPolicy.SOURCE:源文件阶段 value=RetentionPolicy.CLASS:字节码阶段 RetentionPolicy.RUNTIME:运行阶段(创建对象阶段) */测试类
public class AnnotationDemo1 { @MyTest public void demo1(){ System.out.println("demo1执行了..."); } @MyTest public void demo2(){ System.out.println("demo2执行了..."); } public void demo3(){ System.out.println("demo3执行了..."); } }核心运行类
/** * 获得测试类的Class. * 获得Class中的所有的方法. * 遍历每个方法,查看每个方法上是否有MyTest注解. * 有MyTest注解,这个方法就执行. */ public class CoreRunner { public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException { // 1.获得测试类的Class: Class clazz = AnnotationDemo1.class; // 2.获得Class中的所有的方法: 规定了测试的方法必须是public. Method[] methods = clazz.getMethods(); // 3.遍历每个方法: for(Method method:methods){ boolean flag = method.isAnnotationPresent(MyTest.class);//② if(flag){ // 说明方法上有MyTest注解: method.invoke(clazz.newInstance(), null); } } } } ②boolean isAnnotationPresent(Class annotationClass): 判断指定类型的注释是否存在于此元素上 是则返回 true,否则返回 false。