Groovy @CompileStatic类是否仍然包含元类代码?

时间:2014-06-05 10:14:44

标签: java groovy static-typing groovy-eclipse static-compilation

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

0 个答案:

没有答案