首页 > 其他分享 >过滤器,拦截器,AOP的区别

过滤器,拦截器,AOP的区别

时间:2023-06-29 16:37:30浏览次数:31  
标签:拦截器 请求 SpringMVC AOP 过滤器 HandlerInterceptor

Spring AOP

AOP (Aspect Orient Programming),直译过来就是 面向切面编程,AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向切面编程,实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术,AOP可以拦截指定的方法并且对方法增强,而且无需侵入到业务代码中,使业务与非业务处理逻辑分离;

而SpringAOP,则是AOP的一种具体实现,Spring内部对SpringAOP的应用最经典的场景就是Spring的事务,通过事务注解的配置,Spring会自动在业务方法中开启、提交业务,并且在业务处理失败时,执行相应的回滚策略;与过滤器、拦截器相比,更加重要的是其适用范围不再局限于SpringMVC项目,可以在任意一层定义一个切点,织入相应的操作,并且还可以改变返回值;

 

Filter和HandlerInterceptor

之所以没有选择Filter和HandlerInterceptor,而是AOP来实现业务操作日志功能,是因为Filter和HandlerInterceptor自身的一些局限性:

过滤器

过滤器(Filter)是与servlet相关联的一个接口,主要适用于java web项目中,依赖于Servlet容器,是利用java的回调机制来实现过滤拦截来自浏览器端的http请求,可以拦截到访问URL对应的方法的请求和响应(ServletRequest request, ServletResponse response),但是不能对请求和响应信息中的值进行修改;一般用于设置字符编码、鉴权操作等;

如果想要做到更细一点的类和方法或者是在非servlet环境中使用,则是做不到的;所以凡是依赖Servlet容器的环境,过滤器都可以使用,如Struts2、SpringMVC;

 

拦截器

拦截器的(HandlerInterceptor)使用范围以及功能和过滤器很类似,但是也是有区别的。首先,拦截器(HandlerInterceptor)适用于SpringMVC中,因为HandlerInterceptor接口是SpringMVC相关的一个接口,而实现java Web项目,SpringMVC是目前的首选选项,但不是唯一选项,还有struts2等;因此,如果是非SpingMVC的项目,HandlerInterceptor无法使用的;

其次,和过滤器一样,拦截器可以拦截到访问URL对应的方法的请求和响应(ServletRequest request, ServletResponse response),但是不能对请求和响应信息中的值进行修改;一般用于设置字符编码、鉴权操作等;如果想要做到更细一点的类和方法或者是在非servlet环境中使用,则也是是做不到的;

总之,过滤器和拦截器的功能很类似,但是拦截器的适用范围比过滤器更小;

 

SpringAOP、过滤器、拦截器对比

在匹配中同一目标时,过滤器、拦截器、SpringAOP的执行优先级是:过滤器>拦截器>SpringAOP,执行顺序是先进后出,具体的不同则体现在以下几个方面:

1、作用域不同

  • 过滤器依赖于servlet容器,只能在 servlet容器,web环境下使用,对请求-响应入口处进行过滤拦截;
  • 拦截器依赖于springMVC,可以在SpringMVC项目中使用,而SpringMVC的核心是DispatcherServlet,而DispatcherServlet又属于Servlet的子类,因此作用域和过滤器类似;
  • SpringAOP对作用域没有限制,只要定义好切点,可以在请求-响应的入口层(controller层)拦截处理,也可以在请求的业务处理层(service层)拦截处理;

2、颗粒度的不同

  • 过滤器的控制颗粒度比较粗,只能在doFilter()中对请求和响应进行过虑和拦截处理;
  • 拦截器提供更精细颗粒度的控制,有preHandle()、postHandle()、afterCompletion(),可以在controller对请求处理之前、请求处理后、请求响应完毕织入一些业务操作;
  • SpringAOP,提供了前置通知、后置通知、返回后通知、异常通知、环绕通知,比拦截器更加精细化的颗粒度控制,甚至可以修改返回值;

标签:拦截器,请求,SpringMVC,AOP,过滤器,HandlerInterceptor
From: https://www.cnblogs.com/blogtech/p/17514507.html

相关文章

  • AOP事务处理
    前言AOP是Spring的一大特性,面向切面编程给开发者提供了一种全新的开发思路,不侵入业务逻辑,不修改业务逻辑的代码,实现一些程序必要的辅助功能,比如说:输出日志、权限校验、事务处理等等,优雅的AOP让程序的方法不再紧紧地耦合在一起,达到了解耦的目的,想用就用,不想用就不用AOP介绍AOP也......
  • 利用JAVA的AOP运行时注解实现请求VO的复杂组装
    背景上一篇介绍了关于JAVA的AOP编译时注解的开发经验,因此,这里则接着来讲讲AOP运行时注解,摘取的是利用运行时注解实现微服务对请求对象(VO)中的指定字段特殊处理的统一封装,典型场景就是SpringCloudGateway对用户请求经过鉴权、过滤、路由等处理之后,将必要信息添加到消息头中,转发到相......
  • 拦截器的配置以及执行顺序
    在SpringBoot中,拦截器的执行顺序可以通过InterceptorRegistry对象的addInterceptor()方法按照添加的顺序进行配置。默认情况下,拦截器的执行顺序是按照它们添加到拦截器注册表中的顺序执行的。也就是说,先添加的拦截器会先执行,后添加的拦截器会后执行importorg.springframework......
  • 布隆过滤器
    一、作用布隆过滤器(BloomFilter)可以用于检索一个元素是否存在于一个集合中。二、底层数据结构bitmap(位图):相当于是一个以bit位为单位的数组,数组中每个单元只能存储二进制数0或1。存储数据:通过多个hash函数,根据hash计算数组对应的位置改为1。查询数据:使用相同hash函数获取到多......
  • wireshark 过滤器 过滤规则
    wireshark过滤器wireshark有两种过滤器,一种是抓包过滤器,一种是显示过滤器,注意两种过滤器的过滤规则不一样。抓包过滤器定义得当,就可以抓少量的包而达到目的,抓的包太多,wireshark会卡顿。抓包过滤器抓包过滤器,顾名思义是用来抓包的,抓包过滤器抓取数据包,显示过滤器过滤前者抓取的数......
  • 布谷鸟过滤器核心代码
    privatebooleanwriteBits(longcurIndex,longtag,BooleanbitValue){CommandBatchServiceexecutorService=newCommandBatchService(commandExecutor);RBitSetAsyncbs=redisUtils.createBitSet(executorService);//判断curIndex出是否已有......
  • Spring面向切面编程(AOP)
    在软件开发中,我们经常需要解决一些与业务逻辑无关的横切关注点(cross-cuttingconcerns),例如日志记录、性能监测、事务管理等。传统的面向对象编程方法往往将这些关注点与核心业务逻辑混杂在一起,导致代码的可维护性和可扩展性下降。为了解决这个问题,Spring框架引入了面向切面编程(AOP......
  • Feign客户端的拦截器
    importfeign.RequestInterceptor;importfeign.RequestTemplate;importlombok.extern.slf4j.Slf4j;importorg.springframework.stereotype.Component;importorg.springframework.web.context.request.RequestContextHolder;importorg.springframework.web.context.r......
  • 通过网关添加过滤器【SpringCloud】
    spring:application:name:gateway#服务名称cloud:nacos:server-addr:localhost:8848#nacos地址gateway:routes:#网关路由配置-id:itemservice#路由id,自定义,只要唯一即可#uri:http://127.0.0.1:8081#路由......
  • 15. AOP总结
    1.AOP的核心概念概念:AOP(AspectOrientedProgramming)面向切面编程,一种编程范式作用:在不惊动原始设计的基础上为方法进行功能增强核心概念代理(Proxy):SpringAOP的核心本质是采用代理模式实现的连接点(JoinPoint):在SpringAOP中,理解为任意方法的执行切入点(Pointcut):匹配连......