我希望在源代码编译成类文件前添加一些内容(例如:添加方法或字段)。但我不知道该如何实现。有没有任何方法可以做到这一点? 我知道一个开源项目叫 Lombok,它可以自动将setter和getter方法添加到一个类中,并且IDE(eclipse)可以立即找到新添加的方法。那么,有人可以告诉我它是如何实现的吗?
lombok的源代码在github上。据我所知,它使用javac注解处理功能的内部API。注解处理器只能创建新文件,而不能修改当前编译的文件。通过类型转换、修补类加载器和覆盖某些方法,lombok能够修改当前正在编译的Java文件的抽象语法树,并添加方法或源代码。这是可行的,但我认为它是一种黑客行为,不应太多依赖它。如果你想修改已创建的类文件,像cglib或asm这样的字节码重写框架是更清晰的解决方案,我个人认为。