多语言展示
当前在线:1030今日阅读:126今日分享:42

spring aop五种通知源码解析

spring切面提供了五种通知,那么这五种通知又是如何实现的呢
方法/步骤
1

spring切面的核心处理类是ReflectiveMethodInvocation,切面的实现使用的其实spring的拦截器

2

接着我们看一下这个类的核心方法proceed(),五种通知会在been初始化的时候解析成拦截器组装到interceptorsAndDynamicMethodMatchers属性列表中

3

这里的currentInterceptorIndex是记录当前已经进入的拦截器的个数,只有当所有的拦截器都执行过之后,才会执行invokeJoinpoint(),进入真正需要执行的方法

4

我们看一下前置通知MethodBeforeAdviceInterceptor的invoke方法,可以看到该方法先执行before的增强方法,之后会回调ReflectiveMethodInvocation的proceed()

5

正常返回通知AfterReturningAdviceInterceptor的invoke方法

6

异常返回通知AspectJAfterThrowingAdvice的invoke方法

7

最终通知AspectJAfterAdvice的invoke方法

8

环绕通知AspectJAfterAdvice的invoke方法,这个不会回调ReflectiveMethodInvocation的proceed()方法,需要在自己的增强方法里面手动回调

9

看一下自己的环绕通知配置

10

同时通过debug发现,在一个切面中同时配置这五种增强,其织入的先后顺序为异常返回通知、正常返回通知、最终通知、环绕通知、前置通知

推荐信息