我想知道在调用目标方法之后是否可以拦截方法? 例如,如下所示:
@CleanUp
public void doSomething{
...
}
我希望能够在方法调用之后拦截该方法。 在上面的示例中,我将在调用方法后进行常规清理。
答案 0 :(得分:2)
如果使用标准CGLIB Enhancer,则可以选择是否要在调用代理方法之前或之后执行代码。例如:
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
调用后的任何内容都将是在调用代理方法并返回后执行的代码。