使用org.reflection从java中的特定类获取带注释的方法

使用org.reflection从java中的特定类获取带注释的方法,java,reflection,annotations,Java,Reflection,Annotations,我需要从不同的类中检索一些带注释的方法。我正在使用以下代码: Reflections reflections = new Reflections( new ConfigurationBuilder() .setUrls(ClasspathHelper.forPackage("my.package")) .setScanners(new MethodAnnotationsScanner()) )

我需要从不同的类中检索一些带注释的方法。我正在使用以下代码:

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


    Set<Method> resources =
        reflections.getMethodsAnnotatedWith(org.testng.annotations.Test.class);
反射=新反射(
新的ConfigurationBuilder()
.setURL(ClasspathHelper.forPackage(“my.package”))
.setScanners(新方法AnnotationsCanner())
);
设置资源=
reflections.getMethodsAnnotatedWith(org.testng.annotations.Test.class);
我找到了Reflections类的代码。但是,这段代码是针对整个
包的(也就是说,出于某种原因,代码返回项目中所有带注释的方法,而不仅仅是指定的包)

但是,我只想从一个特定的类中获取带注释的方法。我对这件事一无所知


如何更改构造函数,以便只返回特定类中带注释的方法?

您需要使用输入筛选器来排除其他类。下面是一个示例(注意:如果MyClass中嵌套了任何类,那么这些类也将得到匹配)

final String className=MyClass.class.getCanonicalName();
最终谓词筛选器=新谓词(){
公共布尔应用(字符串arg0){
返回arg0.startsWith(className);
}
};
反射=新反射(
新的ConfigurationBuilder()
.setURL(ClasspathHelper.forClass(MyClass.class))
.filterInputsBy(过滤器)
.setScanners(新方法AnnotationsCanner());
设置资源=
reflections.getMethodsAnnotatedWith(org.testng.annotations.Test.class);

您需要使用输入筛选器来排除其他类。下面是一个示例(注意:如果MyClass中嵌套了任何类,那么这些类也将得到匹配)

final String className=MyClass.class.getCanonicalName();
最终谓词筛选器=新谓词(){
公共布尔应用(字符串arg0){
返回arg0.startsWith(className);
}
};
反射=新反射(
新的ConfigurationBuilder()
.setURL(ClasspathHelper.forClass(MyClass.class))
.filterInputsBy(过滤器)
.setScanners(新方法AnnotationsCanner());
设置资源=
reflections.getMethodsAnnotatedWith(org.testng.annotations.Test.class);

我详细解释了我的解释。现在更清楚了吗?更好了,但我仍然认为你的答案是错误的。当我运行您建议的代码时,它会返回来自其他类的方法。谢谢,但是当我运行该代码时,它会返回项目中所有类的带注释的方法,而不仅仅是指定的类。这将教会我如何在不进行测试的情况下发布。我已经更正了我的解决方案,以正确过滤输入类。这在我这边正在运行。它仍然扫描MyClass.class以外的资源。尝试在谓词中打印arg0,您将看到。当然,谓词会捕获它,但它不必要地考虑MyClass以外的类。classI在我的解释中进行了扩展。现在更清楚了吗?更好了,但我仍然认为你的答案是错误的。当我运行您建议的代码时,它会返回来自其他类的方法。谢谢,但是当我运行该代码时,它会返回项目中所有类的带注释的方法,而不仅仅是指定的类。这将教会我如何在不进行测试的情况下发布。我已经更正了我的解决方案,以正确过滤输入类。这在我这边正在运行。它仍然扫描MyClass.class以外的资源。尝试在谓词中打印arg0,您将看到。当然,谓词将捕获它,但它不必要地考虑MyClass.class以外的类