【编程基础知识】Spring过滤器、拦截器、AOP区别

一、过滤器:

过滤器拦截的是URL(HTTP请求,一次请求包含了请求和响应)

Spring中自定义过滤器(Filter)一般只有一个方法,返回值是void,当请求到达web容器时,会探测当前请求地址是否配置有过滤器,有则调用该过滤器的方法(可能会有多个过滤器),然后才调用真实的业务逻辑,至此过滤器任务完成。过滤器并没有定义业务逻辑执行前、后等,仅仅是请求到达就执行。

特别注意:过滤器方法的入参有request 、response、 FilterChain,其中FilterChain是过滤器链,使用比较简单.而request,response则关联到请求流程,因此可以对请求参数做过滤和修改,同时FilterChain过滤链执行完,并且完成业务流程后,会返回到过滤器,此时也可对请求的返回数据做处理。

二、拦截器:

拦截器拦截的是URL(HTTP请求,一次请求包含了请求和响应)

拦截器有三个方法,相对于过滤器更加细致,有被拦截逻辑执行前、后等。Spring中拦截器有三个方法:preHandle,postHandle,afterCompletion。分别表示如下

public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o)表示被拦截的URL对应的方法执行前的自定义处理

public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView)表示此时还未将modelAndView进行渲染,被拦截的URL对应的方法执行后的自定义处理,。

public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e)表示此时modelAndView已被渲染,执行拦截器的自定义处理

三、AOP:

AOP(面向切面):面向切面拦截的是类的元数据(包、类、方法名、参数等)

相对于拦截器更加细致,而且非常灵活,拦截器只能针对URL做拦截,而AOP针对具体的代码,能够实现更加复杂的业务逻辑。具体类型参照其他博客。

四、总结

三者使用场景:三者功能类似,但各有优势,从过滤器--》拦截器--》切面,拦截规则越来越细致,执行顺序依次是过滤器、拦截器、切面。

相关推荐
猫豆~1 分钟前
ceph分布式存储——1day
java·linux·数据库·sql·云计算
爱吃烤鸡翅的酸菜鱼1 分钟前
Spring Boot 注解全栈指南:涵盖 Bean 注册、配置加载、请求映射、事务控制、数据校验等一网打尽
java·开发语言·spring boot·后端·spring
running up6 分钟前
Spring IOC与DI核心注解速查表
java·后端·spring
YDS8297 分钟前
SpringCloud —— Sentinel详解
java·spring cloud·sentinel
洛阳泰山8 分钟前
快速上手 MaxKB4J:开源企业级 Agentic 工作流系统在 Sealos 上的完整部署指南
java·人工智能·后端
bybitq10 分钟前
string,byte,rune,character?详解Golang编码-UTF-8
开发语言·后端·golang
guslegend10 分钟前
SpringSecurity授权原理与实战
java
原来是好奇心12 分钟前
深入Spring Boot源码(七):测试框架原理与最佳实践
java·源码·springboot
无限进步_14 分钟前
【C语言】栈(Stack)数据结构的实现与应用
c语言·开发语言·数据结构·c++·后端·visual studio
embrace9914 分钟前
【C语言学习】预处理详解
java·c语言·开发语言·数据结构·c++·学习·算法