java - 反射 API 不返回带注释的类

标签 java annotations

我正在尝试使用 Reflections API但我发现很难使用自定义注释取回类。

我从一个目录中传入一个 URL 列表;单步执行代码似乎找到了具有注释的类。

URLClassLoader urlClassLoader = new URLClassLoader(plugins.toArray(new URL[plugins.size()]), null);

            Reflections reflections = new Reflections(new ConfigurationBuilder()
                    .setUrls(ClasspathHelper.forClassLoader(urlClassLoader))
                    .setScanners(
                            new SubTypesScanner(false),
                            new TypeAnnotationsScanner()));

但是我需要包含注释的类的最后一段代码总是返回空集。我做错了什么吗?

classes = reflections.getTypesAnnotatedWith(Column.class, true);

这里是注解类;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
    boolean load() default false;
    Class loaderClass();
    Class criteriaClass();
    String indicator();
    String columnName();
}

看来我的失败点其实是;

return Sets.newHashSet(concat(forNames(annotated, loaders()), forNames(classes, loaders())));

loaders 方法返回 null。带注释的 Iterables 和类 Iterables 都已填写。

最佳答案

好吧,看来我有点简单化了......

我传入的子目录需要使用 URLClassLoader 添加到 ClassLoader。

URLClassLoader childURLClassLoader = new URLClassLoader(plugins.toArray(new URL[plugins.size()]), classLoader);

一旦我这样做了,然后修改了 ConfigurationBuilder;

Reflections reflections = new Reflections(new ConfigurationBuilder()
                    .setScanners(new SubTypesScanner(false), new TypeAnnotationsScanner())
                    .setUrls(ClasspathHelper.forClassLoader(childURLClassLoader)).addClassLoader(childURLClassLoader));

一切顺利

关于java - 反射 API 不返回带注释的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32897823/

相关文章:

java - 我可以让线程等待锁,然后在释放后跳过它吗?

java - 这是确定 Java 通配符 <?> referee 的运行时类型的最佳实践示例

mysql - JPA 2 : Exception using @Table annotation

java - 如何通过注释在 Groovy 脚本中提供私有(private)字段

scala - 是否可以让 SBT 尊重 Scalatest 的 DoNoDiscover 注释?

java - 为什么 isAnnotationPresent(Id.class) 不适用于类文件

Java 1.6 升级

java - Future.cancel() 方法不起作用

java - 如何将 Jmeter 变量保存到 csv 文件

java - 如何防止为某些类创建 java-doc