Annotation之标记注解

自定义的注解,该注解没有任何成员变量,仅仅是一个标记Annotaion

package annotation_;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 仅仅是注解标记
 * @desc 标记程序元素 是可以测试的
 * @author 杨润康Bla
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Testable {

}

写一个用于测试标记注解的类

package annotation_;
/**
 * 用于测试的目标类
 * @author 杨润康Bla
 */
public class TargetTestClass {
    //只要是使用 @Testable 注解标记的,都表明只是可测试
    @Testable
    public static void m1(){
        System.out.println("Test....m1");
    }

    @Testable
    public static void m2(){
        System.out.println("Test....m2");
    }

    public static void m3(){
        System.out.println("Test....m3");
    }

    @Testable
    public static void m4(){
        System.out.println("Test....m4");
    }

    @Testable
    public static void m5(){
        throw new IllegalArgumentException("m5 Exception...");//需要将异常抛出
    }

    public static void m6(){
        System.out.println("Test....m6");
    }

    @Testable
    public static void m7(){
        throw new RuntimeException("m7 Exception..."); //需要将异常抛出
    }

    @Testable
    public static void m8(){
        System.out.println("Test....m8");
    }

}

标记注解本身对程序是没有任何影响的,仅仅是标记作用,所以写一个注解的处理工具,让我们写的注解(标记注解或其他自定义、非自定义注解)产生实际作用

package annotation_;

import java.lang.reflect.Method;

/**
 *注解处理工具
 */
public class AnnotationProcessorTool {

    public static void process(String clazz) throws Exception{

        Integer successCount = 0;
        Integer failedCount = 0;

        Method[] methods = Class.forName(clazz).getMethods();
        for(Method method : methods){
            if(method.isAnnotationPresent(Testable.class)){ //如果是被Testable注解类注解的
                try {
                    method.invoke(null);
                    successCount++;
                } catch (Exception e) {
                    System.out.println(method.getName() +"异常:"+ e.getCause());
                    failedCount++;
                }
            }
        }

        System.out.println("一共运行了" + (successCount+failedCount) + "个测试方法");
        System.out.println("成功运行了" + successCount + "个测试方法");
        System.out.println("失败了" + failedCount + "个测试方法");
    }
}

最后,写个测试类测试一下吧

package annotation_;

public class MainTest {
    public static void main(String[] args) throws Exception {
        String clazz = TargetTestClass.class.getName();
        AnnotationProcessorTool.process(clazz);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值