Java 在运行时编辑注释属性

Java editing annotation attributes at runtime

有没有办法在运行时修改Field注解的属性?不仅仅是您可以在任何时候从 Field 获得的注释对象,而且将来只要您获得相同的注释,它就会更新为新值。

我的任务是能够在 运行 时编译一个 Java 文件,然后在应用程序中使用该 Class。我已经做到了,但唯一的问题是,虽然在标准 Java 应用程序中自定义注释确实得到保存,但由于某种原因,当 运行 在 Spring 应用程序 运行ning on Tomcat 7. 这都是在内存编译顺便说一句,在此过程中从未创建任何文件。

我找不到任何方法来解决这个问题,所以我决定再次解析 Java 文件并在我需要的任何字段中添加注释。我想出了如何通过一些 hack 向以前没有的字段添加注释,但现在我需要配置它,因为注释有一些属性,几个布尔值和一个 int。

我研究了很多Whosebug问题中提供的几种方法,但它们都修改了你通过反射获得的注解对象,如果我在另一种方法中试图获得相同的注解,它的值会被重置.任何对此事的见解将不胜感激。

对于以后查看此内容的任何人,我通过首先编译我的代码并在将其创建为 class 之前获取字节码来解决问题。然后我使用 Javassist 在运行时添加注释。在那之后,我只是通过自定义 class 加载器将它编译成 class,这让我得到了 Class 对象,而没有将它加载到系统 class 加载器中。