【问题标题】:How to inspect runtime annotations with javassist如何使用 javassist 检查运行时注释
【发布时间】:2014-10-13 18:56:54
【问题描述】:

当尝试使用 Javassist 在运行时检查代码时,我需要查看注释。举个简单的例子:

ClassPool pool = ClassPool.getDefault();
CtClass clazz = pool.getCtClass("org.junit.Test");
boolean found = false;
for (Object annotation : clazz.getAvailableAnnotations()) {
    if ("java.lang.annotation.Target".equals(annotation.getClass().getName())) {
        found = true;
    }
}

问题是这段代码永远不会设置found = true。返回的注解类有:

com.sun.proxy.$Proxy8
com.sun.proxy.$Proxy9

知道如何获取实际注释而不是代理吗?或者如何从代理获取实际注释?

【问题讨论】:

    标签: java javassist


    【解决方案1】:

    注解对象不是注解类型的直接实例,而是实现注解接口的某些(在本例中为代理)对象的实例。

    试试if (annotation instanceof java.lang.annotation.Target)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多