侧边栏壁纸
博主头像
再见理想博主等级

只争朝夕,不负韶华

  • 累计撰写 112 篇文章
  • 累计创建 64 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

Filter、Interceptor 和 AOP 的区别

再见理想
2022-05-27 / 0 评论 / 0 点赞 / 515 阅读 / 1,280 字

一,过滤器 Filter

  • 1, Filter(过滤器)是J2EE的规范,Servlet2.3开始引入/实现的是职责链模式。多个过滤器形成一个过滤器链。
  • 2, 实现Filter接口,分别有init()用于完成过滤器的初始化,destroy() 用于过滤器销毁前,完成某些资源的回收,doFilter()实现过滤功能,对每个请求增加额外的处理。
  • 3, 基于 Servlet,通过函数回调方式实现,可以过滤请求和图片文件等,每个请求一个过滤器只能过滤一次。
  • 4, 器拦截web访问url地址 严格意义上讲,filter只是适用于web中,依赖于Servlet容器,利用Java的回调机制进行实现。

应用场景

1,用户访问权限处理;
2,设置字符集乱码处理;
3,过滤敏感词汇、压缩响应信息

二,拦截器 Interceptor

  • 1, 基于SpringMVC,基于java 的反射机制,代理模式实现;
  • 2, java里的拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。
  • 3, 实现HandlerInterceptor接口有三个方法,分别为在业务处理器处理请求之前被调用(preHandle()),在业务处理器处理完请求后(postHandle()),完全处理完请求后被调用(afterCompletion())。
  • 4, 只能拦截请求,可以访问上下文等对象,功能强大,一个请求可多次拦截。

应用场景

1,全局日志管理
2,用户访问权限处理

相关文章:
SpringBoot使用拦截器替代AOP实现日志记录

三,AOP

SpringAOP、SpringIOC笔记

  • 1, 面向切面拦截的是类的元数据(包、类、方法名、参数等),相对于拦截器更加细致,而且非常灵活,拦截器只能针对URL做拦截,而AOP针对具体的代码,能够实现更加复杂的业务逻辑。
  • 2, Spring AOP和拦截器一样,都是AOP的实现方式的一种,均使用代理模式实现。
  • 3, 拦截器只对 action 负责,作用层面一般位于 Controller 层,Spring AOP 主要是拦截对 Spring 管理的 Bean 的访问,一般作用与 Service 层
  • 4, Spring AOP的注解有 @Before、@After、@AfterReturning、@AfterThrowing、@Around,可以更灵活的配置要监听处理的Bean。

四,过滤器和拦截器的区别

过滤器和拦截器,这两者在功能方面很类似,但是在具体技术实现方面,差距还是比较大的。

我们先理解一下AOP的概念,AOP不是一种具体的技术,而是一种编程思想。在面向对象编程的过程中,我们很容易通过继承、多态来解决纵向扩展。 但是对于横向的功能,比如,在所有的service方法中开启事务,或者统一记录日志等功能,面向对象的是无法解决的。所以AOP——面向切面编程其实是面向对象编程思想的一个补充。

过滤器和拦截器都属于面向切面编程的具体实现。而两者的主要区别包括以下几个方面:

  1. Filter 是依赖于 Servlet容器,属于Servlet规范的一部分,而拦截器则是独立存在的,可以在任何情况下使用。
  2. Filter 的执行由 Servlet 容器回调完成,而拦截器通常通过动态代理(反射)的方式来执行。
  3. Filter 的生命周期由 Servlet 容器管理,而拦截器则可以通过IoC容器来管理,因此可以通过注入等方式来获取其他Bean的实例,因此使用会更方便。
  4. 在 action 的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

五,拦截器和AOP区别

AOP是基于动态代理,生成一系列的代理类,效率较慢。而拦截器是基于SpringMVC,在SpringMVC工作流程中的执行方法action前后加上执行的代码,效率高。

六,执行顺序:

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

拦截方向和抛出异常方向图:

小结

拦截器相比过滤器有更细粒度的控制,依赖于Spring容器,可以在请求之前或之后启动,过滤器主要依赖于servlet,过滤器能做的,拦截器基本上都能做。

0

评论区