使用Reflections API搜索带注释的类时出现问题

时间:2015-05-18 21:48:32

标签: java google-reflections

我很难使用Reflections API查找在运行时使用自定义注释进行注释的类。最终目标是找到项目中所有使用我的自定义@Job注释进行注释的类,收集它们,并允许每个类从一个位置运行,而无需手动将每个类添加到页面。但是,我发现让初始搜索工作正常非常困难,所以我无法继续我的项目。

我目前的做法是使用:

Reflections reflections = new Reflections(new ConfigurationBuilder()
        .setUrls(ClasspathHelper.forPackage("jobs"))
        .setScanners(new TypeAnnotationsScanner())
        .filterInputsBy(new FilterBuilder().includePackage("jobs")));
Set<Class<?>> jobs = reflections.getTypesAnnotatedWith(Job.class);

其中“jobs”是包含我正在搜索的所有作业类的包,它将使用自定义@Job注释进行注释。 “jobs”是我项目中的基础包,但我机器上的整体网址看起来像“...... /(project)/ app / jobs”。此设置导致搜索到一个URL,这是“... /(project)/ app /”,并在配置对象中添加了额外的过滤器“+ jobs。*”。这似乎工作正常,但显然有些错误,因为我没有在集合中获得任何类。

如果重要,注释编码为:

package jobs;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Job {
    String description();
}

注释类位于与我正在搜索的作业类相同的“作业”包中。包含注释的作业定义的示例是:

package jobs;
@Job(description = "Description of what the job will do")
public class ExampleJob extends MasterJob {...}

我无法找到我需要更改的内容,以使此搜索按预期运行。感谢您的帮助,如果我能进一步澄清,请告诉我。

编辑:我认为问题与Play Framework如何加载其类有关。幸运的是,框架提供了自己的注释搜索功能,我用它来代替。根据评论,我在这里列出的代码将起作用,因为你有所有的依赖关系来运行它。随意使用它作为模板,让我知道它是否适合你。

0 个答案:

没有答案