我开始将一些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元数据和编码编译进去吗?如果是这样,还有其他方法可以禁用它吗?