6

是否可以在编译时使用像 ASM 这样的字节码操作库?

具体来说,我想使用 Java 的注释处理 API 在带注释的类上实现大量样板方法。实现注释处理器很简单,但运行时文件似乎.class还不存在Processor。还有其他方法吗?

4

3 回答 3

2

您可能对 Javassist ( http://www.jboss.org/javassist ) 感兴趣,它可以在编译后步骤中增强和保存类。

本文介绍了如何保存增强类:https ://dzone.com/articles/implementing-build-time

特别是,一旦你改变了一个类,你可以做这样的事情:

 compiledClass.writeFile("/tmp/modifiedClassesFolder");
于 2013-01-28T19:37:44.100 回答
1

这应该是可能的,因为以下项目正在这样做:Project Lombok

还:

Java 8 将带来一种新机制,允许您为 Java 编译器 (javac) 编写插件。编译器插件允许您向 javac 添加新阶段,而无需更改其代码库。新行为可以封装在插件中并分发给其他人使用。例如,javac 插件可用于执行以下操作:

• 添加额外的编译时检查

• 添加代码转换

• 对源代码进行定制分析

于 2013-01-28T20:40:15.897 回答
-1

您应该改用 CGLib。使用 CGLib,您可以使用方法拦截器添加代理,并让拦截器实现您的样板代码。另一种选择是查看 Javassist。使用 Javassist,您可以使用实际文本(在字符串中)创建一个新的子类,并让 javassist 将其编译为字节码。

于 2013-01-28T19:31:02.090 回答