通过学习实现spring的自定义标签,可以知道 <mvc:interceptors />标签是通过继承NamespaceHandlerSupport的MvcNamespaceHandler注册入Spring容器中。对应的解析器为InterceptorsBeanDefinitionParser类。触发流程详见here

InterceptorsBeanDefinitionParser的parse方法中将定义一个MappedInterceptor类型的RootBeanDefinition类。这个RootBeanDefinition 好特么熟悉。。

设置完构造函数的参数后,通过registerWithGeneratedName方法,将bean保存在DefaultListableBeanFactory中的beanDefinitionNames,beanDefinitionMap两个属性中,供后面调用。

容器ApplicationContext中,onfresh会调用finishBeanFactoryInitialization方法来进行bean的注册

之前的beanDefinitionNames和beanDefinitionMap要开始干活了

到此拦截器在容器中的初始化结束了。下面是具体请求中的触发逻辑。

DispatcherServlet会先调用onRefresh方法,内部调用initStrategies方法进行初始化

initHandlerMappings将初始化所有的handlerMapping,在容器中拿到所有的HandlerMapping类型的bean

查看HandlerMapping的子类结构可以发现 所有的子类都会继承或者变相继承AbstractHandlerMapping

而AbstractHandlerMapping中的initApplicationContext方法中的detectMappedInterceptors方法将获取到所有的拦截器。并放入adaptedInterceptors中供后面使用

当请求过来时,将调用DispatcherServlet的doService方法,接着调用doDispatch方法。doDispatch内部先将之前的HandlerMapping 转化成HandlerExecutionChain用来专门处理拦截器。

看到这个adaptedInterceptors 好开心。。

然后调用applyPreHandle来进行拦截处理。通过this.getInterceptors()获取到拦截器bean,遍历这些bean 调用他们的preHandle方法

End...

浅谈Spring拦截器的实现相关推荐

  1. 浅谈:Spring Boot原理分析,切换内置web服务器,SpringBoot监听项目(使用springboot-admin),将springboot的项目打成war包

    浅谈:Spring Boot原理分析(更多细节解释在代码注释中) 通过@EnableAutoConfiguration注解加载Springboot内置的自动初始化类(加载什么类是配置在spring.f ...

  2. 由openSession、getCurrentSession和HibernateDaoSupport浅谈Spring对事物的支持

    由openSession.getCurrentSession和HibernateDaoSupport浅谈Spring对事物的支持 Spring和Hibernate的集成的一个要点就是对事务的支持,op ...

  3. 浅谈Spring定时任务

    浅谈Spring定时任务 三种定时任务基于原理 多定时任务并发配置 动态定时任务 定时任务Demo 三种定时任务基于原理 SpringBoot配置定时任务主要有Spring Schedule.JDK自 ...

  4. 浅谈Spring IOC和DI及Spring工厂类

    浅谈Spring IOC和DI及Spring的工厂类 文章目录 浅谈Spring IOC和DI及Spring的工厂类 一. IOC 1.什么是IOC 2.为什么使用IOC 传统开发模式的弊端 3. 使 ...

  5. 浅谈 Spring IOC

    浅谈 Spring IOC 什么是IOC 理解 IOC 和 DI Spring IOC 相关操作个人总结 什么是IOC Ioc-Inversion of Control,即"控制反转&quo ...

  6. spring拦截器传递传递参数到controller+Aop切面环绕方法传递参数到目标方法

    一.前言 由于业务需要,在网上找了很久得到了这两种方式.本文代码偏少,主要讲解一下怎么传,如何接收,也记录一下,以便之后查看. 二.Spring拦截器传递参数到controller 下面是我拦截器中的 ...

  7. 浅谈Spring IOC的理解

    浅谈Spring IOC的理解 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊 ...

  8. Spring拦截器的切入点定义

    Spring拦截器定义切入点: 1.NameMatchMethodPointcutAdvisor (根据方法名匹配织入)  <bean id="advisor" class= ...

  9. 浅谈Android文件管理器的几种实现方式(原理篇)--对我有帮助

    转自 https://blog.csdn.net/weixin_33698823/article/details/87269955 浅谈Android文件管理器的几种实现方式 为了完成毕业设计,我花费 ...

最新文章

  1. 资产管理大佬讲述:如何用大数据及人工智能挑选基金?
  2. 对于STM32F103三轴机械臂控制器进行基本功能测试-上下运动功能
  3. Java 折半查询_java之折半查询
  4. VC++获取操作系统的版本 GetVersionEx函数
  5. 发现2017年最好的CSS框架
  6. docker快速入门_Docker标签快速入门
  7. 安卓逆向_15( 二 ) --- Android Studio 3.6.3 JNI 环境配置 和 so 生成开发 demo
  8. JDBC连接SQL Server 2005问题
  9. 1014. 最佳观光组合
  10. 分层抽样(Stratified sampling)
  11. 电脑如何录制gif动图
  12. 数据库存储大文本类型
  13. 燃烧远征怀旧服务器人数小程序,魔兽怀旧服一直更新下去,最终会开到哪个版本?...
  14. libfdk_aac介绍
  15. 宜宾学院谢江宜计算机基础题,宜宾学院2011-2012学年度下期期末公共课考试安排表.xls...
  16. 计算机等级考试照片用ps怎么调,Photoshop教程:用PS消除照片中的杂色条纹
  17. 移动端微信、QQ浏览器 web 用 rem 单位适配不生效问题
  18. 笔记(十):redis集群
  19. 敲代码时如何快速移动光标_HTML网页代码大全
  20. 滴水逆向三期实践10:动态链接库

热门文章

  1. SpringBoot之Undertow
  2. 大学物理(上)-期末知识点结合习题复习(1)——运动的描述(两类运动学知识点、圆周运动知识点、相对运动知识点)
  3. 缓存淘汰算法——LRU算法详细总结及代码实现
  4. 大学生计算机怎么挑,萌新福利!准大学生如何挑选笔记本电脑?
  5. Wpf Reportviewer 生成报表、柱状图
  6. AppStore 金融APP上架审核不完全指南
  7. 解决win11关机关不掉的问题 win11关机关不掉可以强制关机吗
  8. 计算机主机关不了,电脑关不了机 应该怎么办呢
  9. 秒杀(二)关于秒杀系统的思考与解决方案
  10. 在线视频图片测试链接