2015-09-09 53 views
0

我需要從各個類中檢索一些註釋的方法。我正在使用此代碼:從java中的特定類獲取註釋方法,使用org.reflection

Reflections reflections = new Reflections(
      new ConfigurationBuilder() 
      .setUrls(ClasspathHelper.forPackage("my.package")) 
      .setScanners(new MethodAnnotationsScanner()) 
      ); 


    Set<Method> resources = 
     reflections.getMethodsAnnotatedWith(org.testng.annotations.Test.class); 

我找到了Reflections類的代碼。然而,這個代碼是針對整個package(並且由於某種原因代碼返回了我的項目中的所有註釋方法,而不僅僅是指定的包)。

但是,我只想從一個特定的類獲取註釋的方法。我無法制作Reflections javadoc的正面或反面。

如何更改構造函數,以便只返回來自特定類的註釋方法?

回答

3

您將需要使用輸入過濾器來排除其他類。這裏有一個例子(注意:如果嵌套在MyClass中的任何類都會匹配。)

final String className = MyClass.class.getCanonicalName(); 
    final Predicate<String> filter = new Predicate<String>() { 
     public boolean apply(String arg0) { 
      return arg0.startsWith(className); 
     } 
    }; 

    Reflections reflections = new Reflections(
      new ConfigurationBuilder() 
      .setUrls(ClasspathHelper.forClass(MyClass.class)) 
      .filterInputsBy(filter) 
      .setScanners(new MethodAnnotationsScanner())); 

    Set<Method> resources = 
      reflections.getMethodsAnnotatedWith(org.testng.annotations.Test.class); 
+0

爲什麼你認爲這會起作用? –

+0

我擴展了我的解釋。現在更清楚了嗎? – ivern

+0

更好,但我仍然認爲你的答案是錯誤的。當我運行您建議的代碼時,它會從其他類中返回方法。 –