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; } }