0

使用 Groovy 2.0

正如背景一样,我正在将 Yaml 与 SnakeYaml 滚动到 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);
}
4

0 回答 0