Java Annotation(2)
阿新 • • 發佈:2018-12-08
使用Annotation的例子
學習《瘋狂java講義》
使用標記Annotation
- 首先,我們先定義一個不含任何成員變數的Annotation類,也就是標記Annotation。
//Retention註釋用於指定Testable註釋可以保留多久,這裡是保留在執行期間
//Target註釋用於指定Testable註釋能修飾的目標,這裡指定了只能是方法
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
//定義Annotation用@interface關鍵字。
//我們還記得定義介面的時候用的是interface關鍵字
public @interface Testable{}
- 然後我們再定義一個類,裡面定義一些方法,有的用了Testable註釋,有的沒有用
public class MyTest {
@Testable
public static void m1(){}
public static void m2(){}
@Testable
public static void m3(){
throw new RuntimeException("Boom");
}
public static void m4(){ }
@Testable
public static void m5(){}
public static void m6(){}
@Testable
public static void m7(){
throw new RuntimeException("Crash");
}
public static void m8(){}
}
- 有了這些註釋,並不能真正的影響程式的執行。因此我們還需要為這些註釋提供一個註釋處理工具。它會分析目標類,如果目標類方法使用了@Testable註釋,則通過反射來執行該測試方法。
public class TestProcessor{
public static void process(String clazz) throws ClassNotFoundException {
int passed = 0;
int failed = 0;
for(Method m : Class.forName(clazz).getMethods()){
if (m.isAnnotationPresent(Testable.class)){
try{
m.invoke(null);
passed++;
} catch (Exception ex){
System.out.printf("方法"+m+"異常"+ex.getCause()+"\n");
failed++;
}
}
}
System.out.println("共運行了"+(passed+failed)+"方法,"+"成功了"+passed+",失敗了"+failed);
}
}
- 定義了註釋,有了目標類,又定義了註釋工具類,現在可以再加個主方法,然後把上面的都執行起來啦
public class RunTest {
public static void main(String[] args)throws Exception{
TestProcessor.process("MyTest");
}
}
- Ok,現在看看執行的結果