注解案例--简单的测试框架

简介: java注解精讲

 目录

一、自定义注解

1.自定义注解源代码

2.元注解

二、定义实用类

1.实用类源代码

三、解析注解

1.解析步骤

2.解析注解源代码

3.测试结果:

四、注解小结


一、自定义注解

1.自定义注解源代码

package cn.test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Check {
}

image.gif

2.元注解

自定义注解@Check

在自定义中用到了

@Retention(RetentionPolicy.RUNTIME)  该注解是表示用到该注解的注解的作用阶段    

样例注解是:   是保存到字节码文件且被JVM读取到。

@Target({ElementType.METHOD})      该注解是表示用到该注解的注解的作用类型

样例注解是:    是表面该注解的注解是作用在方法上的。

二、定义实用类

1.实用类源代码

package cn;
import cn.test.Check;
public class Calculator {
    @Check
    public void add()
    {
        System.out.println("1+0="+(1+0));
    }
    @Check
    public void sub()
    {
        System.out.println("1-0="+(1-0));
    }
    @Check
public void mul(){
    System.out.println("1*0="+(0*1));
}
@Check
public void div()
{
    System.out.println("1/0="+(1/0));
}
public void show()
{
    System.out.println("无bug.........");
}
}

image.gif

给加减乘除四个方法加上了@Check注解(进行编译检查)

三、解析注解

1.解析步骤

       (1)

       创建对象

Calculator c=new Calculator();


       (2)

       获取字节码文件对象

Class<? extends Calculator> aClass = c.getClass();

       (3)

       获取所有方法

Method[] methods = aClass.getMethods();

       (4)

               判断方法上是否有Check注解

               要判断  肯定要遍历

                       定义变量  --出现次数

                       定义IO流   把异常写入文档

2.解析注解源代码

package cn.test;
import cn.Calculator;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Method;
/*
 *简单的测试框架
 *    解析注解
 * 当主方法执行后 会自动自行被检测的所有方法(加了Check注解的方法),判断方法是否异常
 *
 */
public class TestCheck {
    public static void main(String[] args) throws IOException {
//1.创建对象
        Calculator c=new Calculator();
        //2.获取字节码文件对象
        Class<? extends Calculator> aClass = c.getClass();
        //3.获取所有方法
        Method[] methods = aClass.getMethods();
        //4.判断方法上是否有Check注解
        //要判断  肯定要遍历
        int  number=0;  //出现异常的次数
        BufferedWriter bw=new BufferedWriter(new FileWriter("bug.txt"));
        for (Method method:methods)
        {
            //isAnnotationPresent   方法 判断当前方法  method 对象  有没有指定的注解被加上了  被作用了
            if (method.isAnnotationPresent(Check.class))
            {
//5.有,执行
// 6.捕获异常
                try {
                    method.invoke(c);
                } catch(Exception e){
                    number++;
                    bw.write(method.getName()+"方法异常");
                bw.newLine();
                bw.write("异常名称:"+e.getCause().getClass().getSimpleName());
                bw.newLine();
                bw.write("异常原因:"+e.getCause().getMessage());
                bw.newLine();
                }
            }
            }
        bw.write("本次一个出现"+number+"次异常");
        bw.flush();
        bw.close();
        }
    }

image.gif

3.测试结果:

image.gif编辑

image.gif编辑

四、注解小结

1.以后大多数时候,我们会使用注解,而不是自定义注解

2.注解给谁看:

(1)编译器

(2)给解析程序使用

3.注解不是程序的一部分,可以理解为注解就是一个标签


相关文章
|
4月前
|
Java 编译器
Java注解案例-简单测试框架
Java注解案例-简单测试框架
25 0
|
3月前
|
Java
SpringBoot - 使用Assert校验让业务代码更简洁
SpringBoot - 使用Assert校验让业务代码更简洁
39 0
|
11月前
|
Java 测试技术 程序员
枚举、注解及单元测试的简单笔记
枚举、注解及单元测试的简单笔记
48 0
|
11月前
|
Java Android开发
Butter Knife框架(小刀注解)_@BindView()用法
对于ButterKnife类官方的解释是: Field and method binding for Android views. Use this class to simplify finding views and attaching listeners by binding them with annotations. 翻译过来就是: Android视图的字段和方法绑定。使用此类通过将视图与注释绑定来简化查找视图和附加侦听器。
83 0
|
Java 测试技术 数据库连接
单元测试_JUnit常用单元测试注解介绍及代码演示 1
单元测试_JUnit常用单元测试注解介绍及代码演示
115 0
|
Java 测试技术
单元测试_JUnit常用单元测试注解介绍及代码演示 2
单元测试_JUnit常用单元测试注解介绍及代码演示
99 0
|
缓存 Java 测试技术
单元测试整合spring-test实践
本文主要是对Junit简介,以及结合说spring-test完善Junit不足,以及使用需要注意的问题。
228 0
|
安全 Java Spring
《SpringBoot系列十一》:精讲如何使用@Conditional系列注解做条件装配
《SpringBoot系列十一》:精讲如何使用@Conditional系列注解做条件装配
430 0
《SpringBoot系列十一》:精讲如何使用@Conditional系列注解做条件装配
|
Java 编译器
注解案例--简单的测试框架
注解案例--简单的测试框架
注解案例--简单的测试框架
|
Java 测试技术 Maven
Junit5 架构、新特性及基本使用(常用注解与套件执行)
Junit5 架构、新特性及基本使用(常用注解与套件执行)