HandlerInterceptor是springMVC项目中的拦截器,它拦截的目标是请求的地址,比MethodInterceptor先执行。实现一个HandlerInterceptor拦截器可以直接实现HandlerInterceptor接口,也可以继承HandlerInterceptorAdapter类。这两种方法殊途同归,其实HandlerInterceptorAdapter也就是声明了HandlerInterceptor接口中所有方法的默认实现,而我们在继承他之后只需要重写必要的方法。下面就是HandlerInterceptorAdapter的代码,可以看到一个方法只是默认返回true,另外两个是空方法

  1. public abstract class HandlerInterceptorAdapter implements HandlerInterceptor {
  2. /**
  3. * This implementation always returns <code>true</code>.
  4. */
  5. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
  6. throws Exception {
  7. return true;
  8. }
  9. /**
  10. * This implementation is empty.
  11. */
  12. public void postHandle(
  13. HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
  14. throws Exception {
  15. }
  16. /**
  17. * This implementation is empty.
  18. */
  19. public void afterCompletion(
  20. HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
  21. throws Exception {
  22. }
  23. }
  24. MethodInterceptor是AOP项目中的拦截器,它拦截的目标是方法,即使不是controller中的方法。实现MethodInterceptor拦截器大致也分为两种,一种是实现MethodInterceptor接口,另一种利用AspectJ的注解或配置
    1. public class MethodInvokeInterceptor implements MethodInterceptor {
    2. @Override
    3. public Object invoke(MethodInvocation methodInvocation) throws Throwable {
    4. System.out.println("before method invoke");
    5. Object object = methodInvocation.proceed();
    6. System.out.println("after method invoke");
    7. return object;
    8. }
    9. }

    下面是基于注解的AspectJ方式

    1. @Component
    2. @Aspect
    3. public class AutoAspectJInterceptor {
    4. @Around("execution (* com.test.controller..*.*(..))")
    5. public Object around(ProceedingJoinPoint point) throws Throwable{
    6. System.out.println("AutoAspectJInterceptor begin around");
    7. Object object = point.proceed();
    8. System.out.println("AutoAspectJInterceptor end around");
    9. return object;
    10. }
    11. }

    下面是一个用于支持AspectJ方式拦截的普通的bean,当然你也可以在配置文件中声明这个bean 

    1. @Component
    2. public class AspectJInterceptor {
    3. public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
    4. System.out.println("AspectJInterceptor around before");
    5. Object object = proceedingJoinPoint.proceed();
    6. System.out.println("AspectJInterceptor around after");
    7. return object;
    8. }
    9. }

    当然,这一切都离不开配置,具体看配置中的注释

    1. <!-- 自定义拦截器 ,先过mvc:interceptors-->
    2. <bean id="methodInvokeInterceptor" class="com.test.interceptor.MethodInvokeInterceptor"/>
    3. <bean id="aspectInterceptor" class="com.test.interceptor.AspectJInterceptor"/>
    4. <aop:config>
    5. <!--切入点,controlller -->
    6. <aop:pointcut id="pointcut_test"   expression="execution(* com.test.controller..*.*(..))" />
    7. <!--在该切入点使用自定义拦截器 ,按照先后顺序执行 -->
    8. <aop:advisor pointcut-ref="pointcut_test" advice-ref="methodInvokeInterceptor" />
    9. <aop:aspect ref="aspectInterceptor">
    10. <aop:around method="around" pointcut="execution(* com.test.controller..*.*(..))"/>
    11. </aop:aspect>
    12. </aop:config>
    13. <!-- 自动扫描使用了aspectj注解的类 -->
    14. <aop:aspectj-autoproxy/>

转载于:https://www.cnblogs.com/cmfwm/p/7657101.html

HandlerInterceptor与MethodInterceptor相关推荐

  1. java按需读取word文件_干货分享:ASP.NET CORE(C#)与Spring Boot MVC(JAVA)异曲同工的编程方式总结...

    我(梦在旅途,http://zuowj.cnblogs.com; http://www.zuowenjun.cn)最近发表的一篇文章<.NET CORE与Spring Boot编写控制台程序应有 ...

  2. java和asp.net core_干货分享:ASP.NET CORE(C#)与Spring Boot MVC(JAVA)异曲同工的编程方式总结...

    目录 我(梦在旅途,http://zuowj.cnblogs.com; http://www.zuowenjun.cn)最近发表的一篇文章<.NET CORE与Spring Boot编写控制台程 ...

  3. (转)spring中的拦截器(HandlerInterceptor+MethodInterceptor)

    1.  过滤器跟拦截器的区别 在说拦截器之前,不得不说一下过滤器,有时候往往被这两个词搞的头大. 其实我们最先接触的就是过滤器,还记得web.xml中配置的<filter>吗~ 你应该知道 ...

  4. 处理器拦截器(HandlerInterceptor)详解

    处理器拦截器(HandlerInterceptor)详解 编程界的小学生 关注 2017.04.06 15:19* 字数 881 阅读 657评论 0喜欢 4 简介 SpringWebMVC的处理器拦 ...

  5. 拦截器HandlerInterceptor、ResponseBodyAdvice和@ExceptionHandler执行顺序

    HandlerInterceptor接口结构: ResponseBodyAdvice接口结构 执行顺序: 1.HandlerInterceptor.preHandle() 2. 业务方法 3.@Exc ...

  6. SpringMVC和SpringBoot的拦截器 HandlerInterceptor 入门

    总体步骤 1.自定义一个实现HandlerInterceptor 接口的类比如SignUpHandlerInterceptor(我这边以注册登录拦截器为例). package com.example. ...

  7. SpringMVC拦截器HandlerInterceptor原理及使用

    在使用SpringMVC拦截器的时候,我们接触的最多的便是HandlerInterceptor接口,因为我们所有的自定义拦截器都必须要实现HandlerInterceptor接口,那么就先从Handl ...

  8. 一篇文章教你弄懂 SpringMvc中的HandlerInterceptor

    文章列表 一.HandlerInterceptor简介 一.HandlerInterceptor应用实例 写在前面: 我是「境里婆娑」.我还是从前那个少年,没有一丝丝改变,时间只不过是考验,种在心中信 ...

  9. Spring Boot——自定义多个拦截器(HandlerInterceptor)配置方法与执行顺序

    执行顺序 源代码 拦截器类 package com.jd.m.tg.interceptor;import org.slf4j.Logger; import org.slf4j.LoggerFactor ...

最新文章

  1. 【青少年编程】【一级】小镇一日游
  2. python-虎扑爬虫
  3. Linux基础:让history记录命令的历史执行时间
  4. 基于ATMEGA8的Arduino Nano(UNO)开发板
  5. RavenDB FS 安装使用 介绍
  6. linux制作openssl rpm,CentOS 7 定制 OpenSSL RPM 包
  7. java arguments_命令行中执行带参数的java程序(Command-Line Arguments)
  8. python发送邮件脚本_python-发邮件脚本
  9. 微课系列(8):Python中lambda表达式的变量作用域
  10. vivo人工智能推荐算法岗提前批面试
  11. 函数对象function object 以及boost::bind的一点了解
  12. 用计算机控制人造卫星和导弹发射,广西成人高校计算机实用基础统考理论试题(...
  13. 前端图片文字复制粘贴功能
  14. 网络io,select,poll与epoll的初步认识
  15. js弹窗确认取消php,JS实现删除时的确认弹窗
  16. 腾达ap设置说明_腾达(Tenda)F3无线信号放大模式(Client+AP)设置 | 192路由网
  17. 快速排序的时间复杂度与空间复杂度
  18. 用java编写一个美元汇率转换,编写一个人民币和美元的双向汇率转换程序,实现美元和人民币转换,汇率:1美元=6.92人民币...
  19. (三)Java的基本程序结构(二)---数据输入、控制流、大数、数组
  20. JavaScript混淆安全加固

热门文章

  1. 疯狂ios之cocos2d中的文本
  2. new 动手学深度学习V2环境安装
  3. 【前端 · 面试 】TCP 总结(一)—— 概述
  4. LeetCode:通过递归方法打印杨辉三角形
  5. SMS动态查询部署安装XPSP3补丁
  6. django mysql 修改密码_Django更改sqlite数据库使用mysql数据库 - 李金龙
  7. SQL Server触发器创建、删除、修改、查看
  8. 使用YAML创建一个 Kubernetes Depolyment
  9. (转)Managed DirectX +C# 开发(入门篇)(七)
  10. 湖北孝感学校计算机好吗,湖北省孝感市2018年上半年计算机等级考试注意事项...