我正在尝试使用 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/