1.执行系统默认的expose
啥也不做,回到拦截链上
2.执行throwing
啥也不做,回到拦截链上,如果有异常,然后不会异常,又抛出异常
3. 执行afterreturing
又回到拦截链上,然后获取到返回值。
4.执行after
回到拦截链,最后一定会执行,finally
5.执行around
java.lang.reflect.Method#invoke
通过反射回到around的方法里面了。
第二行又回到拦截链上了。
6.执行before
先去执行before里面的方法然后回到拦截链上。
此时拦截链已经执行完了,然后就去执行目标方法。
总结:就是先遍历出所有advisor,然后根据顺序一直在拦截链上遍历。
顺序:around,before先执行,然后拦截链上的执行完后,执行目标方法,最后根据执行结果来执行throwing,returning,一定会执行after.注意around和before顺序不是固定的,根据拓扑排序来确定