2015-10-20 45 views
0

我知道我們可以通過java反射基於註釋來執行類。如何通過JAVA處理註釋的所有功能反射

該代碼將執行哪個都被註解@Test(TestNG的框架)一個方法。是否有可能處理該註釋中可用的功能?

如果可能的話,如何實現的東西?

回答

2

您可以使用getAnnotation而不是isAnnotationPresent(前者在註釋不存在的情況下返回null)獲取註釋,然後像訪問其他Java對象一樣訪問其屬性。

Test testAnnotation = method.getAnnotation(Test.class); 
if (testAnnotation != null) { 
    System.out.println(testAnnotation.priority()); 
} 
+0

非常感謝您的輸入。我試過上面的代碼示例。當我從一個文件的類執行java反射時,我在一個類(class b)文件中有6個優先級它執行了註釋並且具有屬性作爲優先級的方法,但是它沒有按照在b類中優先執行的順序執行這些方法。它先執行優先級4,然後執行3,2,5,6,1(隨機執行)?爲什麼它發生?有什麼辦法可以解決這個問題嗎? – SKumar

+0

你如何按優先級排序方法?換句話說,你如何實現'priority'的語義? –

+0

我的要求是,我只需要根據優先級值調用方法。基本上什麼時候我們通過testNG執行方法它將檢查優先級並讓它們按順序執行。但是,在這裏我的情況是,執行是通過反思來保證的。我想通過JAVA Reflection來執行testNG可以完成的相同功能。這就是爲什麼我質疑如何啓用@Test註釋的屬性。如果它啓用,那麼它必須處理序列執行。請糾正我,如果我錯了。 – SKumar

1
for (Method me : method) { 
    Annotation[] annotations = me.getDeclaredAnnotations(); //get Annotations associated with that method 

    for(Annotation annotation : annotations){ 
     if(annotation instanceof Test){ 
      Test myAnnotation = (Test) annotation; 
      System.out.println("priority: " + myAnnotation.priority()); 
      System.out.println("dependsOnMethod: " + myAnnotation.dependsOnMethod()); 
     } 
    } 
} 
+0

感謝您的輸入.. !!! – SKumar