使用自定義註解完成@Test註解功能類似的效果

使用自定義註解完成@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;

    }

}








































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章