Java批注处理和字节码操作

时间:2018-12-14 11:25:24

标签: annotation-processing bytecode-manipulation

据我了解,注释处理器是Java编译器的“插件”,这意味着注释处理是在编译时完成的。

由于字节码操作也可以在编译时完成,因此在编译时是否可以从注释处理器生成的类中操作字节码?

在编译器实际编译任何东西之前是否进行批注处理,以便在主编译阶段对生成的类进行编译?

或更广泛地说,有人会解释还是将我指向关于javac编译器和注释处理器的执行顺序的Java文档?

谢谢

1 个答案:

答案 0 :(得分:0)

注释处理在“解析并输入”之后和“分析并生成”阶段之前进行。请参见compiler overview,以直观地了解编译管道。这意味着在运行注释处理器时,类文件尚不存在。

不是注释处理器也可能不会更改其处理的编译单元的AST。它可能会产生新的类型(虽然作为源代码或字节码,尽管我不知道后者的任何实际示例),但它可能还会创建已处理类型的超类型。