我想拦截脚本及其任何子类型的所有方法调用,最好使用MetaClasses,但是如果需要,我可以从Groovy中完成。我基本上想做这样的事情:
MetaClassImpl meta = new MetaClassImpl(Script.class) {
@Override
public final Object invokeMethod(Object obj, String method, Object[] args) {
if(method.equals("evaluate")) {
System.out.println("intercepted");
return run(shell, (String) args[0], "Evaluate");
} else {
return super.invokeMethod(obj, method, args);
}
}
};
如果我将它应用于我创建的每个Script实例,但上述工作正常,但我想将它应用于Script类并使其适用于所有子类型。有没有办法做到这一点?
编辑:我正在尝试做的是用所有Script及其子类型的实例替换另一种方法。或者得到评估以尊重脚本在其中运行的groovy shell上设置的ImportCustomizer。