package org.theonefx.wcframework.aop;
import org.theonefx.aopaloance.intercept.MethodInvocation;
/**
* @File : AbstractMethodProxy.java
* @ClassName : AbstractMethodProxy
* @Author : TheoneFx
* @Date : 2013-3-5 上午10:40:25
* @Version : v1.0
* @Description : 抽象方法代理,供子类实现,例如CGlib什么的。是动态代理进入方法拦截器执行链的入口。
*/
public abstract class AbstractMethodProxy {
protected Object doProxy(TargetMethodInvoker targetMethodInvoker, InterceptorChain chain) throws Throwable {
MethodInvocation invocation = null;
Object retVal = null;
// 获取方法的的通知器链
if (chain == null || chain.getSize() == 0) {
// 直接调用目标方法
retVal = targetMethodInvoker.invoke();
} else {
// 创建调用器来调用通知链和目标方法
invocation = new ProxyedObjectMethodInvocation(targetMethodInvoker, chain);
retVal = invocation.proceed();
}
return retVal;
}
}