您的位置:首页 > 大数据 > 人工智能

Annotation之标记注解

2016-06-15 11:21 435 查看
自定义的注解,该注解没有任何成员变量,仅仅是一个标记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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息