如何在Java中构建时使用注释动态生成代码?

我正在寻找生成代码的解决方案。 我用谷歌搜索,搜索SO和一些博客,但我找不到一个好的解决方案。

我想在我的类上添加一个注释,在编译时,一些方法和属性会自动添加到类中。

我正在寻找的解决方案的要点:

  • 生成的代码可自定义(强制)
  • 不需要像apt这样的外部工具(强制性)
  • 仅限JDK,没有第三方框架( 强制选项)
  • 注释名称可自定义(可选)

例如 :

 @Aliasable public class MyClass { //Some properties // Contructor ... // Some methods } 

编译后我的类看起来像这样:

 public class MyClass { //Some properties private String alias; // Contructor ... // Some methods public String getAlias() { return alias; } public void setAlias(String alias) { this.alias=alias; } } 

编辑:
最后,我将我的第三个要求从MANDATORY转为OPTIONAL,并选择了项目Lombok (与Maven和Eclipse轻松集成,几乎没有任何工作可以使用它)。

看看龙目岛项目 。 它会在您编写时根据您的要求生成代码:

 public class MyClass { @Getter @Setter private String alias; } 

如果你需要它还可以做很多事情。 我知道你没有要求外部工具,但你基本上会重新创建它。

自1.6版以来, 注释处理工具已集成在javac中,并且是JDK的一部分 。 因此,使用Pluggable Annotation API时无需外部工具。 您可以使用Mirror API分析自定义注释或方法/参数/字段/类声明来生成任何代码。

您不能/不应该更改现有的类。 可以通过创建子类来生成扩展方法。

我使用XML和XSLT来生成代码。 它用于EJB,Logic和视图的CRUD部分。 它不是在运行时进行的,而是在构建服务器上。 开发人员可以手动生成代码以进行良好的开发。 这是通过ANT在buildserver上使用的相同命令完成的。

因为生成是使用XML和XSLT,所以它是高度可定制的。

如果您Java code generation with XSLT您将遇到很多示例。 请注意,这种技术可以追溯到〜2000年,因此现在可能已经有了更简单的解决方案。