将编程注释添加到Java类

Avn*_*evy 7 java compiler-construction annotations bytecode-manipulation

用法示例:
我想在类字段上添加一个自定义注释@MyContainer,然后在所有这些字段上自动添加相关的Hibernate注释(取决于字段类型和属性).
另外,我需要将JAXB XmlType注释添加到类中,并将类型名称基于类名.
我还希望基于其类型等向字段添加注释.所有添加的注释应该在运行时可用(因此hibernate/JAXB可以找到它们).
我知道以下选项:

  1. 预处理类源(错误选项)
  2. 使用javax.annotation.processing API编译期间的处理
  3. 使用Java Assist等工具进行编译后操作
  4. 使用java.lang.instrument API在类加载期间进行操作
  5. 使用AspectJ(功能不够强大)

我的主要目标是:

  1. 在类和源之间保持同步以进行调试
  2. 支持Maven和IDE(Eclipse/Intellij)的工作

如果已经完成此类工作的人能够为这样的任务推荐最佳方法(也许还有潜在的陷阱),我将不胜感激.

Spa*_*ker 0

我认为预处理类源应该是您的首选方式。这使您能够使源代码与编译的类同步,这对于您提到的调试很有好处。但它也有利于版本控制,因为您可以签入那些生成的注释。如果在编译期间运行工具,那么追踪工具中的问题也会变得更加困难。在生成源阶段运行代码生成时,IDE 支持也应该没有问题。

编辑:快速搜索产生了一些有关使用 eclipse jdtnetbeans 中的某些内容进行编程 java 源修改的信息 。但这可能值得更多研究或者本身就是一个问题。