当前位置 : 主页 > 编程语言 > java >

自定义注解@MyTest

来源:互联网 收集:自由互联 发布时间:2021-06-28
自定义注解类 @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。
网友评论