连接器链调用---Spring源码从入门到精通(二十三)
Posted 后端从入门到精通
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了连接器链调用---Spring源码从入门到精通(二十三)相关的知识,希望对你有一定的参考价值。
上篇文章主要介绍了methodInterceptor拦截器吧增强组件返回的过程:
这篇文章主要介绍拦截器链如何触发:
一、拦截器链的触发过程
1、首先第一个判断是,返回的拦截器集合为空,则直接执行目标方法。
(后面的proceed方法里,拦截器的索引等于拦截去数组-1,也就是执行到了最后一个拦截器,也是直接执行目标方法)
若不为空,CglibMethodInvocation调用proceed()。
点进proceed父类的方法,从源码可以看到currentInterceptorIndex默认是-1,记录当前拦截器的索引。并且每次执行proceed方法,索引都会自增一次。
2、前面的四个拦截器,分别为
ExposeInvocationInterceptor,AspectAfterThrowingAdvice,AfterReturningAdviceInterceptor,AspectAfterAdvice
每次都会调用invoke方法,invoke方法里面又会调用proceed方法。直到索引到最后一个拦截器,跳出循环。
下面已ExposeInvovationInterceptor方法为例
3、最后一个拦截器MethodBeforeAdviceInterceptor,先调用前置通知,在调用proceed()。开始return跳出循环。
4、renturn跳出循环调用invokeJoinpoint方法。
总结,链式获取每一个拦截器,拦截器执行invoke方法,每一个拦截器等下一个拦截器返回以后再来执行,拦截器链的机制,保证每个拦截器的执行顺序。
以上是关于连接器链调用---Spring源码从入门到精通(二十三)的主要内容,如果未能解决你的问题,请参考以下文章
2018最新区块链技术,从入门到精通视频教程(比特币基础技术)
SpringBoot入门到精通-SpringBoot自动配置原理