spring的两种拦截器HandlerInterceptor和MethodInterceptor

本文介绍了Spring中的两种拦截器:HandlerInterceptor用于SpringMVC,拦截HTTP请求;MethodInterceptor基于AOP,拦截方法执行。HandlerInterceptor不使用反射,采用类似ServletFilter的责任链模式;而MethodInterceptor利用反射和动态代理。两者拦截目标不同,HandlerInterceptor关注请求地址,MethodInterceptor关注方法执行。

介绍

Spring有两种拦截器提供给我们使用,一种是HandlerInterceptor,另一种是MethodInterceptor。这两种的来源不同,实现方式也不同,具体的下面来看一下。

HandlerInterceptor

来源

来源于spring-webmvc包
HandlerInterceptor拦截的是请求,是springMVC项目中的拦截器,它拦截的目标是请求的地址

实现原理

首先要明确,HandlerInterceptor并没有使用反射或者代理来实现,它的实现类似于Servlet的Filter,使用了责任链模式来将多个拦截器组成一个链条,每个拦截器都有机会对请求进行处理,并决定是否继续传递给下一个拦截器。这样可以实现灵活的拦截逻辑,也方便拦截器的复用和扩展。

HandlerInterceptor是在请求到达处理器方法之前和之后执行的。它是通过HandlerMapping来映射处理器方法和拦截器的。HandlerMapping是一个接口,它有多个实现类,比如RequestMappingHandlerMappingBeanNameUrlHandlerMapping等。当程序启动的时候,Spring会扫描所有的处理器方法和拦截器,并将它们注册到对应的HandlerMapping中。当请求到达DispatcherServlet时,它会调用HandlerMapping来获取匹配的处理器方法和拦截器,并按照顺序执行拦截器的preHandle方法、处理器方法、postHandle方法和afterCompletion方法。

我们编写的拦截器,就在RequestMappingHandlerMappinginterceptors

过程

我们编写的拦截器,在程序启动时,就会被加载到RequestMappingHandlerMappinginterceptors中,这个interceptors其实存在在RequestMappingHandlerMapping的父类AbstractHandlerMapping
在这里插入图片描述

代码

这块儿我另开一篇,回头把链接更新过来。

MethodInterceptor

来源

来源于spring-aop包,MethodInterceptor是AOP项目中的拦截器,它拦截的目标是方法,而不是请求。它可以在方法执行前后添加额外的逻辑

实现原理

从它的来源来看,它的确使用了反射和动态代理的技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盖丽男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值