主に POJO と値オブジェクトである多くのクラスの定型文を減らすために、いくつかの Groovy クラスを Maven で構築した Spring アプリケーションに組み込み始めています。(比較のために、私は定型文を処理するために Roo を使用していますが、Roo は Spring と Maven の新しいバージョンでますます不安定になっています。) 私の Spring Data MongoDB クラスの 1 つは次のようになります。
@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
が、いくつかの大きな Groovy メソッドとデータ構造を含むinvokevirtual
巨大なファイルをまだ取得しています。.class
汎用スーパークラスを具体化する空のサブクラスに過ぎない 1 つのクラスは、5k を超えるバイトコードです。
Eclipse 内とコマンド ラインの両方からgroovy-eclipse-compiler
(2.8.0-01) を使用してコードをコンパイルしましたが、多少の違いはありますが、バイトコードには動的な「膨張」がすべて含まれています。私が取り込んでいる Groovy 依存関係は 2.3.2 で、Java ターゲットを 1.7 に設定しています。
@CompileStatic
Groovy メタデータとコードのすべてがコンパイルされているとマークされたクラス全体でさえ期待されますか? もしそうなら、それを無効にする他の方法はありますか?