Groovy 2.0 の使用
背景として、SnakeYaml を使用して Yaml を Groovy クラスにローリングしています。SnakeYaml は Java リフレクションを使用して、プロパティの設定を構築および呼び出します。特定のクラス (Yaml から作成されたもの) を使用して、存在しない単純なプロパティを追加できるようにしたいと考えています。まず、クラス定義で Groovy get/setProperty を使用し、コンテンツをマップ ストアにダンプすることを考えました。しかし、SnakeYaml はリフレクションを使用するため、これは機能しません。プロパティの設定を担当するユーティリティをオーバーライドしようとしました:
def originalMethod = org.yaml.snakeyaml.introspector.PropertyUtils.metaClass.getMetaMethod("getProperty", Class, String)
org.yaml.snakeyaml.introspector.PropertyUtils.metaClass.getProperty = { Class type, String name ->
// do stuff, like create the property on the metaClass
def result = originalMethod.invoke(delegate, type, name)
result
}
しかし、オーバーライドされた「getProperty」メソッドが呼び出されることはありません。アイデア?プロキシインターセプターを使用する方が良いですか? 「getProperty」メソッドのフットプリントは次のとおりです。
public Property getProperty(Class<? extends Object> type, String name)
throws IntrospectionException {
return getProperty(type, name, beanAccess);
}