连接器链调用---Spring源码从入门到精通(二十三)

Posted 后端从入门到精通

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了连接器链调用---Spring源码从入门到精通(二十三)相关的知识,希望对你有一定的参考价值。

上篇文章主要介绍了methodInterceptor拦截器吧增强组件返回的过程:



这篇文章主要介绍拦截器链如何触发:

一、拦截器链的触发过程

1、首先第一个判断是,返回的拦截器集合为空,则直接执行目标方法。

(后面的proceed方法里,拦截器的索引等于拦截去数组-1,也就是执行到了最后一个拦截器,也是直接执行目标方法)

若不为空,CglibMethodInvocation调用proceed()。

点进proceed父类的方法,从源码可以看到currentInterceptorIndex默认是-1,记录当前拦截器的索引。并且每次执行proceed方法,索引都会自增一次。

连接器链调用---Spring源码从入门到精通(二十三)

2、前面的四个拦截器,分别为

    ExposeInvocationInterceptor,AspectAfterThrowingAdvice,AfterReturningAdviceInterceptor,AspectAfterAdvice

   每次都会调用invoke方法,invoke方法里面又会调用proceed方法。直到索引到最后一个拦截器,跳出循环。

下面已ExposeInvovationInterceptor方法为例

3、最后一个拦截器MethodBeforeAdviceInterceptor,先调用前置通知,在调用proceed()。开始return跳出循环。

4、renturn跳出循环调用invokeJoinpoint方法。

   总结,链式获取每一个拦截器,拦截器执行invoke方法,每一个拦截器等下一个拦截器返回以后再来执行,拦截器链的机制,保证每个拦截器的执行顺序。

以上是关于连接器链调用---Spring源码从入门到精通(二十三)的主要内容,如果未能解决你的问题,请参考以下文章

2018最新区块链技术,从入门到精通视频教程(比特币基础技术)

快速开发架构Spring Boot 从入门到精通 附源码

区块链从入门到精通

SpringBoot入门到精通-SpringBoot自动配置原理

spring boot 从入门到精通( 二)通过实体类生成数据库表的方式

Spring 从入门到精通系列 01——Spring概述与体系结构总结