1

我想知道是否可以在调用目标方法后拦截一个方法?例如,如下所示:

@CleanUp
public void doSomething{
...
}

我希望能够在方法调用之后拦截该方法。在上面的示例中,我将在调用方法后进行常见的清理。

4

1 回答 1

2

如果您使用标准的 CGLIB 增强器,您可以选择是否要在调用被代理的方法之前或之后执行代码。例如:

MyClass proxy = (List<String>)Enhancer.create(MyClass.class, new MyInvocationHandler());
proxy.aMethodToInvoke();
.
.
.
class MyInvocationHandler implements MethodInterceptor {
    public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
        System.out.println("Before we invoke the method");
        Object retObj = proxy.invoke(obj, args);
        System.out.println("After we invoke the method");
        return retObj;
    }
}

因此,proxy.invoke调用之后的任何内容都将是在被代理的方法被调用并返回之后执行的代码。

于 2013-10-10T20:38:02.397 回答