是否可以在编译时使用像ASM这样的字节码操作库?
具体来说,我想使用Java的注释处理API在带注释的类上实现样板重的方法。实现annotation processor非常简单,但运行.class
时似乎尚不存在Processor
个文件。还有另一种方式吗?
答案 0 :(得分:1)
您可能对Javassist(http://www.jboss.org/javassist)感兴趣,它可以在编译后的步骤中增强和保存类。
本文介绍如何保存增强类:http://java.dzone.com/articles/implementing-build-time
特别是,一旦你改变了一个类,你就可以这样做: compiledClass.writeFile("/tmp/modifiedClassesFolder");
答案 1 :(得分:1)
应该可以,因为以下项目正在执行它:Project Lombok
此外:
Java 8将带来一种新机制,允许您为Java编译器(javac)编写插件。编译器插件允许您向javac添加新阶段,而无需更改其代码库。新行为可以封装在插件中并分发给其他人使用。例如,javac插件可用于执行以下操作:
•添加额外的编译时检查
•添加代码转换
•执行源代码的自定义分析
答案 2 :(得分:-1)
您应该使用CGLib。使用CGLib,您可以使用方法拦截器添加代理,并让拦截器实现您的样板代码。另一种选择是看看Javassist。使用Javassist,您可以使用实际文本(在字符串中)创建一个新的子类,并让javassist将其编译为字节代码。