使用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);
}