Java反射按类型查询注释

时间:2014-11-02 19:16:50

标签: java class classloader maven-plugin

我尝试使用此代码查询类中的注释:

for (final Annotation annotation : annotations) System.out.println(annotation);
final JsonSchema[] schemas = clazz.getAnnotationsByType(JsonSchema.class);

if (schemas.length == 0) {
    throw new IllegalArgumentException("No JsonSchema annotation found.");
}

如果我通过单元测试到达这里,我会通过schemas.length测试。如果我通过Maven插件将其传递给URLClassLoader()。loadClass(),那么它会抛出IllegalArgumentException。但是,它也打印出来:

@mypackage.JsonSchema()

即。如果我遍历getAnnotations()的结果但是getAnnotationsByType找不到注释,那么注释似乎就在那里。可能导致这种情况的原因是什么?

编辑:如果我尝试循环并比较规范名称然后转换为JsonSchema它不会让我,因为它似乎是一个com.sun.proxy,它不是JsonSchema的实例。

编辑:因为他们在不同的班级加载器中,我确定。如何解决这个问题...

1 个答案:

答案 0 :(得分:0)

知道了。

我正在传递一组URL来加载到新的URLClassLoader()。通过向构造函数添加Thread.currentThread()。getContextClassLoader()的第二个参数,它似乎将它们加载到同一个ClassLoader中,然后一切都按预期工作。