java - 如何使用 javassist 检查运行时注释

标签 java javassist

当尝试使用 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

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

最佳答案

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

尝试if(java.lang.annotation.Target的注释实例)

关于java - 如何使用 javassist 检查运行时注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26337955/

相关文章:

java - 2 个输入字段显示相同的内容

java - 改变JAVA中对象的声明和构造

java - ClassCastExceptions 由于在 WebSphere 8.5.5 应用程序容器中升级到 hibernate 4.2.8

java - 修改 Javassist 代理命名策略

java - 使用Varargs调用方法时出现javassist.CannotCompileException

java - 使用许多点在图像上构建区域

java - Spring Cloud Vault 从错误的配置文件中获取属性

java - Scala 运行编译类失败,直接运行

java - 使用@JsonAnySetter 映射jackson 返回带有javassist 类的Unrecognized 字段

java - Kotlin、Scala 和 Java 的 Gradle 构建失败