会先进入到DynamicAdvisedInterceptor#intercept方法,方法内部实例化一个CglibMethodInvocation对象(对象里面包含了当前目标方法,代理对象,参数,类,调用链等信息),然后CglibMethodInvocation执行ReflectiveMethodInvocation#proceed方法,这个proceed调用过程和JDK动态代理调用过程是一模一样的.

    在proceed方法内部就会形成一个链式调用.interceptorsAndDynamicMethodMatchers就是增强链,先判断如果interceptorsAndDynamicMethodMatchers-1等于currentInterceptorIndex(currentInterceptorIndex的初始值为-1)的话就是目标方法,就直接反射调用即可,

    否则就是增强方法,比如前置方法后置方法等等,就调用MethodInterceptor#invoke去执行.执行完了currentInterceptorIndex加1.(interceptorsAndDynamicMethodMatchers是这个方法的增强通知,有一个增强通知这个长度就加1,如果为0说明这个目标方法没有增强通知).

    说白了就是AOP是利用interceptorsAndDynamicMethodMatchers的索引来控制调用那个切面增加方法.

    执行完了会接着火炬传递调用ReflectiveMethodInvocation#proceed,此时this.interceptorsAndDynamicMethodMatchers.get(++this.currentInterceptorIndex);这个代码块儿根据索引拿到了新的Advice类接着执行这个Advice的invoke方法,.
    然后直到调用到后置的方法的话会先调用AspectJAfterAdvice#invoke,在这个方法内部会调用Joinpoint#proceed执行前置通知,会先调用到MethodBeforeAdvice#before(调用前置方法),然后调用目标方法,最后在finally代码块儿里面调用后置方法.
    然后代码会调用到AfterReturningAdviceInterceptor#invoke执行afterReturning最终方法