是否有办法在运行时修改字段注释的属性?不仅仅是您可以在任何时候从Field获得的注释对象,而且无论何时您获得相同的注释,它都将使用新值进行更新。
我的任务是能够在运行时编译Java文件,然后在应用程序中使用该类。我已经这样做了,但唯一的问题是,虽然在标准Java应用程序中确实保存了自定义注释,但由于某种原因,在运行在Tomcat 7上的Spring应用程序上运行时,它们会被剥离。这都是在内存编译中完成的,在这个过程中不会创建任何文件。
我找不到任何方法来解决这个问题,所以我决定第二次解析Java文件,并在我需要的任何字段中添加注释。通过一些技巧,我弄清楚了如何向以前没有的字段添加注释,但现在我需要配置它,因为注释有一些属性,几个布尔值和一个整型。
我已经研究了许多StackOverflow问题中提供的几种方法,但它们都修改了通过反射获得的注释对象,如果我在另一种方法中尝试获得相同的注释,它的值将被重置。
对于将来查看此内容的任何人,我通过首先编译代码并在将其创建为类之前获取字节码来解决这个问题。然后我使用Javassist在运行时添加注释。之后,我只是通过自定义类加载器将其编译为一个类,它为我提供了class对象,而无需将其加载到系统类加载器中。