Spring 过滤器 拦截器 AOP 三者区别

  • 前言

在工作看到一些逻辑是通过拦截器实现的,个人比较习惯使用AOP处理公共逻辑,所以查阅一些资料源码,理解 过滤器、拦截器、AOP的区别。

  • 过滤器
    • 基于java的函数回调,依赖于servlet容器。
    • 拦截的是URL,对所有的请求都起作用。 当请求到达web容器时,会检测当前请求地址是否配置有过滤器,有则调用该过滤器的方法(可能会有多个过滤器),然后执行具体业务代码。
    • 拦截器无法定义此拦截器在业务代码前还是在业务代码后执行,当请求到达时,就会立即执行。

    • 过滤器可以对request和response进行过滤和修改。

    • 仅在servlet中初始化调用一次

    • 可以用来设置字符集、控制权限、控制转向等等。

  • 拦截器

    • 基于Java反射,代理模式,不依赖servlet容器。

    • 拦截的是URL,可以对拦截的方法进行执行前、渲染前,渲染后三个方法

    • 仅对action起作用,静态资源文件不起作用。

    • 可以被多次调用

    • 可以使用IOC容器中的bean

  • AOP

    • 基于Java反射,代码模式。

    • 可以对类、方法进增强代理,可作用在controller、service、mapper层。

    • 有各种丰富的通知,处理复杂逻辑时比较方便。

    • 灵活程度高于拦截器。

    • 仅对IOC中的bean起作用。

总结:

    三者功能类似,各有优点。从 过滤器 -> 拦截器 -> AOP,增强的规则更加细致,使用灵活程度高。

    执行顺序是   过滤器 -> 拦截器 -> AOP

    过滤器主要是过滤使用,对Java web中的各request、response进行过滤和封装,然后再进入到业务代码中。

     

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值