java - 从 AnnotationProcessor 读取字节码

标签 java annotations instrumentation

Possible Duplicate:
Plugging in to Java compilers

编辑 - 这似乎是 Plugging in to Java compilers 的骗局

<小时/>

我想实现 <a href="http://java.sun.com/j2se/1.5.0/docs/guide/apt/mirror/com/sun/mirror/apt/AnnotationProcessor.html" rel="noreferrer noopener nofollow">AnnotationProcessor</a><a href="http://java.sun.com/j2se/1.5.0/docs/guide/apt/" rel="noreferrer noopener nofollow">apt</a> 一起使用将类编译为字节码后将调用的工具,可以读取和修改字节码。

这样做的原因是我想将带注释的方法翻译为另一种语言,并用调用翻译版本的 stub 替换 java 方法。

但是<a href="http://java.sun.com/j2se/1.5.0/docs/guide/apt/mirror/com/sun/mirror/apt/AnnotationProcessorEnvironment.html" rel="noreferrer noopener nofollow">AnnotationProcessorEnvironment</a>接口(interface)只提供生成新类的方法,不提供读回上一轮生成的类文件的方法。

检测 API 执行的操作与我想要的类似,但仅在运行时执行。我正在寻找一种在编译时执行此操作的方法。

最佳答案

当我想在编译器中进行一些操作时,我查看了一下,但最终使用了后处理器。

您可以使用 APT 操作抽象语法树 (AST),但只能使用特定于编译器的 hack。如果您想要了解如何完成此操作的示例,Project Lombok使用 Sun javac 和 Eclipse 编译器来完成此操作。目前似乎没有更好的方法。

关于java - 从 AnnotationProcessor 读取字节码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1358479/

相关文章:

java - 在java中选择Unicode mysql行?

java - 如何将数据从一个 Activity 传递到下一个 Activity

java - 如何确保在开始返回 bean 之前将资源注入(inject)到我的配置中?

java - Java中的注解处理是什么?

Java - ClassFileTransformer.transform(...) 并发调用相同的 classLoader className 对

java - Android-IllegalStateException : could not execute method of the activity

java - 如何使用 Hibernate 条件实现这个多选和 where 查询?

java - 无法找到类注释

java - 如何使用 Java 检测用新类替换类?

java - 使用字节码操作库 ASM 在每次 putfield 操作后调用对象的方法