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

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

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

获取拦截器链MethodInterceptor---Spring源码从入门到精通(二十二)


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


一、拦截器链的触发过程


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

image.png

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

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

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

image.png

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

   ExposeInvocationInterceptor,AspectAfterThrowingAdvice,AfterReturningAdviceInterceptor,AspectAfterAdvice

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

下面已ExposeInvovationInterceptor方法为例

image.png

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

image.png

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


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

相关文章
|
12天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
2天前
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
21 9
|
28天前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
|
28天前
|
XML Java 数据格式
Spring底层架构源码解析(二)
Spring底层架构源码解析(二)
|
27天前
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
19 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
|
27天前
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
21 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
29天前
|
XML Java 数据格式
手动开发-简单的Spring基于注解配置的程序--源码解析
手动开发-简单的Spring基于注解配置的程序--源码解析
45 0
|
29天前
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
75 0
|
6月前
|
XML Java uml
spring 源码解析——第一篇(ioc xml方式)
spring 源码解析——第一篇(ioc xml方式)
60 0
|
6月前
|
安全 Java 应用服务中间件
阿里技术官架构使用总结:Spring+MyBatis源码+Tomcat架构解析等
分享Java技术文以及学习经验也有一段时间了,实际上作为程序员,我们都清楚学习的重要性,毕竟时代在发展,互联网之下,稍有一些落后可能就会被淘汰掉,因此我们需要不断去审视自己,通过学习来让自己得到相应的提升。
下一篇
无影云桌面