Groovy方法拦截所有子类型

时间:2018-04-12 22:09:05

标签: java groovy metaprogramming metaclass

我想拦截脚本及其任何子类型的所有方法调用,最好使用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。

0 个答案:

没有答案