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); } }
相关文章推荐
- 详解JDK 5 Annotation 注解之@Target的用法介绍
- java教程之java注解annotation使用方法
- Java中注解的工作原理
- Java注解之Retention、Documented、Inherited介绍
- spring aop两种配置方式
- 深入浅析Java注解框架
- Restful传递数组参数及注解大全
- Java @Deprecated注解的作用及传递性
- 全面解析Java中的注解与注释
- 小议Java中@param注解与@see注解的作用
- Java注解详细介绍
- 详解Java编程中Annotation注解对象的使用方法
- JDK 5 提供的注解:Target、Inherited和Documented的区别
- SpringMVC restful 注解之@RequestBody进行json与object转换
- 基于Java 注解(Annotation)的基本概念详解
- Spring常用注解汇总
- Java中三种简单注解介绍和代码实例
- 详解Java Spring各种依赖注入注解的区别
- 详解Java注解教程及自定义注解
- 一个奇怪的异常,SSH使用注解方式