Springboot项目Aop与拦截器与过滤器横向对比

 更新时间:2023年03月28日 09:40:33   作者:凡夫贩夫  
前三篇文章已经介绍过Springboot项目如何实现Aop,拦截器和过滤齐功能,这篇文章主要介绍三者的横向对比,本文有一定的参考价值,感兴趣的小伙伴可以参考阅读

前言

伟人曾经说过,没有调查就没有发言权(好像是伟人说的,不管谁说的,这句话是正确的),有些东西看着简单,张口就来,但很有可能是错的。我个人的经验是,aop、过滤器、拦截器的实现方式很简单,一学就会,不用就忘,忘了再学,学了再忘,如此循环内耗何必呢?因此,如果你和我一样,有一颗强烈的好奇之心,那么不管多简单,动手敲起来吧,温故而知新呢。

功能特性对比

过滤器

过滤器(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环境中使用,则也是是做不到的;

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

Spring AOP

AOP (Aspect Orient Programming),直译过来就是 面向切面编程,AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向切面编程,可以实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术,AOP可以拦截指定的方法并且对方法增强,而且无需侵入到业务代码中,使业务与非业务处理逻辑分离;而SpringAOP,则是AOP的一种具体实现,Spring内部对SpringAOP的应用最经典的场景就是Spring的事务,通过事务注解的配置,Spring会自动在业务方法中开启、提交业务,并且在业务处理失败时,执行相应的回滚策略;与过滤器、拦截器相比,更加重要的是其适用范围不再局限于SpringMVC项目,可以在任意一层定义一个切点,织入相应的操作,并且还可以改变返回值;

代码实现

过滤器实现

传送门:Springboot项目快速实现过滤器功能

拦截器实现

传送门:Springboo项目快速实现拦截器功能

AOP实现

传送门:Springboot项目快速实现Aop功能

实现示例源代码地址:

https://gitcode.net/fox9916/fanfu-web.git(branch:Aop+filter+interceptor)

在实现示例中,主要的过滤器实现类、拦截器实现类和AOP实现类,与涉及到的接口之间的关系如下:

验证结果

匹配中同一个目标(PersonController#getPerson())的情况下,过滤器、拦截器、SpringAOP的执行优先级是:

过滤器>拦截器>SpringAOP,执行顺序是先进后出;

工作原理

从验证结果的输出日志中,已经可以看到,在匹配中同一目标时,过滤器、拦截器、SpringAOP的执行优先级是:过滤器>拦截器>SpringAOP,执行顺序是先进后出,具体的不同则体现在以下几个方面:

1、作用域不同

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

2、颗粒度的不同

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

总结

过滤器、拦截器、AOP本质上来讲,都是面向切面编程的实践,只是在功能特性、适用范围、实现细节上有一些区别。一般情况下,过滤器能实现的功能,拦截器也可以实现;过滤器、拦截器可以实现的功能,AOP也可以实现;那么在业务开发过程中作选型的时候,是不是直接用AOP就完了,其实我认为不能这样,还是需要根据具体的业务环境和技术环境进行选择,杀鸡可必要用牛刀,你说呢?

以上就是Springboot项目Aop与拦截器与过滤器横向对比的详细内容,更多关于Aop与拦截器与过滤器的对比的资料请关注脚本之家其它相关文章!

相关文章

  • Struts2 通过ognl表达式实现投影

    Struts2 通过ognl表达式实现投影

    这篇文章主要介绍了Struts2 通过ognl表达式实现投影,具有一定参考价值,需要的朋友可以了解下。
    2017-09-09
  • 详解Spring AOP 拦截器的基本实现

    详解Spring AOP 拦截器的基本实现

    本篇文章主要介绍了详解Spring AOP 拦截器的基本实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Spring Boot自定义监控指标的详细过程

    Spring Boot自定义监控指标的详细过程

    这篇文章主要介绍了Spring Boot如何自定义监控指标 ,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Java中过滤器、监听器和拦截器的区别详解

    Java中过滤器、监听器和拦截器的区别详解

    这篇文章主要介绍了Java中过滤器、监听器和拦截器的区别详解,有些朋友可能不了解过滤器、监听器和拦截器的区别,本文就来详细讲一下,相信看完你会有所收获,需要的朋友可以参考下
    2024-01-01
  • Java方法的参数传递机制实例详解

    Java方法的参数传递机制实例详解

    这篇文章主要介绍了Java方法的参数传递机制,结合实例形式详细分析了java方法参数传递机制原理、实现方法及操作注意事项,需要的朋友可以参考下
    2019-09-09
  • 一文了解Spring中拦截器的原理与使用

    一文了解Spring中拦截器的原理与使用

    在web开发中,拦截器是经常用到的功能。它可以帮我们预先设置数据以及统计方法的执行效率等等。今天就来详细的谈一下spring中的拦截器,需要的可以参考一下
    2022-06-06
  • Lombok的详细使用及优缺点总结

    Lombok的详细使用及优缺点总结

    最近在学Mybatis,接触到了Lombok的使用,所以写一篇文章记录一下,包括lombok的安装及使用优缺点,感兴趣的朋友跟随小编一起看看吧
    2021-07-07
  • java使用定时器实现监听数据变化

    java使用定时器实现监听数据变化

    这篇文章主要为大家详细介绍了Java如何使用定时器监听数据变化,当满足某个条件时(例如没有数据更新)自动执行某项任务,有兴趣的可以了解下
    2023-11-11
  • Springboot如何实现自定义异常数据

    Springboot如何实现自定义异常数据

    这篇文章主要介绍了Springboot如何实现自定义异常数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 使用IDEA创建java项目的步骤详解(hello word)

    使用IDEA创建java项目的步骤详解(hello word)

    这篇文章主要介绍了使用IDEA创建java项目的步骤详解(hello word),本文分步骤通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12

最新评论