• 那是从何处传来的钟声呢?偶尔听到那钟声,平添一份喜悦与向往之情。

Java过滤器与SpringMVC拦截器之间的关系与区别

后端 Nanait 6年前 (2018-10-25) 1343次浏览 已收录 0个评论 扫描二维码

过滤器拦截器的区别:

  1. 拦截器是基于Java的反射机制,而过滤器是基于函数回调。
  2. 拦截器不依赖于Servlet容器,过滤器依赖于Servlet容器。
  3. 拦截器只能对 action 请求起作用,而过滤器则可以对几乎所有请求起作用。
  4. 拦截器可以访问 action 上下文、值栈里的对象,而过滤器不能。
  5. 在 action 的生命周期中,拦截器可以多次被调用,二过滤器只能在容器初始化时被调用一次。
  6. 拦截器可以获取 IOC 容器中的各个 bean,而过滤器不行,这点很重要,在拦截器中注入一个 service,可以调用业务逻辑。

Spring的拦截器与Servlet的 Filter 有相似之处,比如二者都是 AOP 编程思想的体现,都能实现权限检查、日志记录等。不同的是:

  1. 使用范围不同:Filter 是Servlet规范规定的,只能用于 Web 程序中。而拦截器既可以用于 Web 程序,也可以用于 Application、Swing 程序中。
  2. 规范不同:Filter 是在Servlet规范中定义的,是Servlet容器支持的。而拦截器是在Spring容器内的,是Spring框架支持的。
  3. 使用的资源不同:同其他代码块一样,拦截器也是一个Spring的组件,归Spring管理,配置在Spring文件中,因此能使用 Spring 里的任何资源、对象,例如 Service 对象、数据源、事务管理等,通过 IOC 注入到拦截器即可,而 Filter 不能。
  4. 深度不同:Filter 只在 Servlet 前后起作用。而拦截器能够深入到方法前后、异常抛出前后等,因此拦截器的使用更具有弹性。所以在 Spring 构架的程序中,要优先使用拦截器。

何处钟 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Java 过滤器与 SpringMVC 拦截器之间的关系与区别
喜欢 (3)
[15211539367@163.com]
分享 (0)

您必须 登录 才能发表评论!