我开始将一些 Groovy 类合并到我的 Maven 构建的 Spring 应用程序中,主要是为了减少许多 POJO 和值对象类的样板。(相比之下,我一直在使用 Roo 来处理样板文件,但随着 Spring 和 Maven 的更新版本,Roo 变得越来越不稳定。)我的 Spring Data MongoDB 类之一如下所示:
@Document
class ConcreteProcessingJob implements ImageAssetProcessingJob {
@Id
String id
@Indexed(unique = true, sparse = true)
String jobId
@NotNull
@Past
Date started
// more of the same
}
由于这些只是普通的结构对象,我不需要也不想要 Groovy 的元分类和调用选址的复杂性和开销。我只想要一个相当于 POJO 的东西。我尝试用 注释类@CompileStatic
,但是虽然字节码中的一些调用已替换invokedynamic
为invokevirtual
,但我仍然得到.class
包含几个大型 Groovy 方法和数据结构的巨大文件;一个只有一个空子类的类,它具体化了一个通用超类,它的字节码超过 5k。
我已经从 Eclipse 和命令行中编译了代码,两次都使用groovy-eclipse-compiler
(2.8.0-01),虽然有一些细微的差异,但字节码中仍然包含所有动态“膨胀”。我引入的 Groovy 依赖项是 2.3.2,我的 Java 目标设置为 1.7。
甚至整个类都被标记@CompileStatic
为将所有 Groovy 元数据和代码编译到其中吗?如果是这样,还有其他方法可以禁用它吗?