使用自定义注解完成@Test注解功能类似的效果

来源:互联网 发布:motofastboot软件下载 编辑:程序博客网 时间:2024/06/05 17:34

使用自定义注解完成@Test注解功能类似的效果

1、需求

使用Junit是单元测试的工具,在一个类中使用@Test对程序的方法进行测试,自定义一个注解@MyTest 也将这个注解加在类的方法上,是这个方法得到执行。
2. 技术分析:
【注解】
  • 程序中有注释和注解
  • 注释:给开发人员看.
  • 注解:给计算机看的.
【JDK提供的注释】
  • @override :描述方法的重写.
  • @SupperssWarnings :压制警告.
  • @Deprecated :标记过时.
【自定义注解】
  1. 定义一个类:class
  2. 定义一个接口:interface
  3. 定义一个枚举:enum
  4. 定义一个注解:@interface
【自定义注解案例】
@interface MyDemo1{
}
带有属性的注解:
@interface MyDemo2{
int a()default 1;
String b( );
// 注解属性的类型:基本数据类型,字符串类型Sti让你过,Class,注解类型,枚举类型,以及以上类型的一维数组。
// Date 的();
Class cl();
MyDemo3 D3();//注解
Color c();//枚举
String[ ] arrs( );
}

@MyDemo4("aaa")//  如果属性名称为value那么使用得时候value可以省略(值出现value得属性情况下).
public  class  Demo3{
@interface  MyDemo4{
String   value;
int  a( ) default 1;

3、步骤分析
定义一个测试类:
public class Demo3{

@MyTest
public void demo1(){
System.out.println("demo1 执行了。。。。");
public void     demo2( ){
System.out.println("demo2执行了。。。。");
}

定义核心运行类:
  • 在核心运行类中有一个主函数。
  • 获得测试类的所有方法。
  • 获得每个方法,查看方法上是否有@MyTest注解。
  • 如果有这个注解,让这个方法执行。
4、代码实现
通过元注解定义注解存在的阶段


定义一个注解:
核心运行类:
public   class  Runner{

public  static  void   main (String  [  ]  args){
//反射:获取类得字节码对象.class
Class    class1=Demo3.class;
//获取测试类中得所有方法:
Method[  ]   mjethods= class.getMethods();
//  遍历数组:
for( Method    method  :   methods){
//System.out.println( method .getName() ) ;
//判断方法是否有@MyTest注解:
boolean   flag =method.ispresent(MyTest.class);

// System.out.println(method.getName()+"   "+flag);

            if(flag){

                // 让这个方法执行:

                try {

                    method.invoke(clazz.newInstance(),null);

                } catch (Exception e) {

                    e.printStackTrace();

                }

            }

        }

    }

}

使用注解完成JDBC工具的编写:

public class JDBCUtils {

    privatestatic  String driverClass;

    privatestatic  String url;

    privatestatic  String username;

    privatestatic  String password;

   

    @JDBCInfo

    publicstatic Connection getConnection() throws Exception{

        // 反射:

        Class clazz = JDBCUtils.class;

       

        Method method =clazz.getMethod("getConnection", null);

       

        // 获得方法上的注解:

        JDBCInfo jdbcInfo =method.getAnnotation(JDBCInfo.class);

        driverClass =jdbcInfo.driverClass();

        url = jdbcInfo.url();

        username = jdbcInfo.username();

        password = jdbcInfo.password();

       

        Class.forName(driverClass);

        Connection conn =DriverManager.getConnection(url, username, password);

       

        return conn;

    }

}








































0 0
原创粉丝点击