HandlerInterceptor与MethodInterceptor
HandlerInterceptor是springMVC项目中的拦截器,它拦截的目标是请求的地址,比MethodInterceptor先执行。实现一个HandlerInterceptor拦截器可以直接实现HandlerInterceptor接口,也可以继承HandlerInterceptorAdapter类。这两种方法殊途同归,其实HandlerInterceptorAdapter也就是声明了HandlerInterceptor接口中所有方法的默认实现,而我们在继承他之后只需要重写必要的方法。下面就是HandlerInterceptorAdapter的代码,可以看到一个方法只是默认返回true,另外两个是空方法
- public abstract class HandlerInterceptorAdapter implements HandlerInterceptor {
- /**
- * This implementation always returns <code>true</code>.
- */
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
- throws Exception {
- return true;
- }
- /**
- * This implementation is empty.
- */
- public void postHandle(
- HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
- throws Exception {
- }
- /**
- * This implementation is empty.
- */
- public void afterCompletion(
- HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
- throws Exception {
- }
- }
- MethodInterceptor是AOP项目中的拦截器,它拦截的目标是方法,即使不是controller中的方法。实现MethodInterceptor拦截器大致也分为两种,一种是实现MethodInterceptor接口,另一种利用AspectJ的注解或配置
- public class MethodInvokeInterceptor implements MethodInterceptor {
- @Override
- public Object invoke(MethodInvocation methodInvocation) throws Throwable {
- System.out.println("before method invoke");
- Object object = methodInvocation.proceed();
- System.out.println("after method invoke");
- return object;
- }
- }
下面是基于注解的AspectJ方式
- @Component
- @Aspect
- public class AutoAspectJInterceptor {
- @Around("execution (* com.test.controller..*.*(..))")
- public Object around(ProceedingJoinPoint point) throws Throwable{
- System.out.println("AutoAspectJInterceptor begin around");
- Object object = point.proceed();
- System.out.println("AutoAspectJInterceptor end around");
- return object;
- }
- }
下面是一个用于支持AspectJ方式拦截的普通的bean,当然你也可以在配置文件中声明这个bean
- @Component
- public class AspectJInterceptor {
- public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
- System.out.println("AspectJInterceptor around before");
- Object object = proceedingJoinPoint.proceed();
- System.out.println("AspectJInterceptor around after");
- return object;
- }
- }
当然,这一切都离不开配置,具体看配置中的注释
- <!-- 自定义拦截器 ,先过mvc:interceptors-->
- <bean id="methodInvokeInterceptor" class="com.test.interceptor.MethodInvokeInterceptor"/>
- <bean id="aspectInterceptor" class="com.test.interceptor.AspectJInterceptor"/>
- <aop:config>
- <!--切入点,controlller -->
- <aop:pointcut id="pointcut_test" expression="execution(* com.test.controller..*.*(..))" />
- <!--在该切入点使用自定义拦截器 ,按照先后顺序执行 -->
- <aop:advisor pointcut-ref="pointcut_test" advice-ref="methodInvokeInterceptor" />
- <aop:aspect ref="aspectInterceptor">
- <aop:around method="around" pointcut="execution(* com.test.controller..*.*(..))"/>
- </aop:aspect>
- </aop:config>
- <!-- 自动扫描使用了aspectj注解的类 -->
- <aop:aspectj-autoproxy/>
转载于:https://www.cnblogs.com/cmfwm/p/7657101.html
HandlerInterceptor与MethodInterceptor相关推荐
- java按需读取word文件_干货分享:ASP.NET CORE(C#)与Spring Boot MVC(JAVA)异曲同工的编程方式总结...
我(梦在旅途,http://zuowj.cnblogs.com; http://www.zuowenjun.cn)最近发表的一篇文章<.NET CORE与Spring Boot编写控制台程序应有 ...
- java和asp.net core_干货分享:ASP.NET CORE(C#)与Spring Boot MVC(JAVA)异曲同工的编程方式总结...
目录 我(梦在旅途,http://zuowj.cnblogs.com; http://www.zuowenjun.cn)最近发表的一篇文章<.NET CORE与Spring Boot编写控制台程 ...
- (转)spring中的拦截器(HandlerInterceptor+MethodInterceptor)
1. 过滤器跟拦截器的区别 在说拦截器之前,不得不说一下过滤器,有时候往往被这两个词搞的头大. 其实我们最先接触的就是过滤器,还记得web.xml中配置的<filter>吗~ 你应该知道 ...
- 处理器拦截器(HandlerInterceptor)详解
处理器拦截器(HandlerInterceptor)详解 编程界的小学生 关注 2017.04.06 15:19* 字数 881 阅读 657评论 0喜欢 4 简介 SpringWebMVC的处理器拦 ...
- 拦截器HandlerInterceptor、ResponseBodyAdvice和@ExceptionHandler执行顺序
HandlerInterceptor接口结构: ResponseBodyAdvice接口结构 执行顺序: 1.HandlerInterceptor.preHandle() 2. 业务方法 3.@Exc ...
- SpringMVC和SpringBoot的拦截器 HandlerInterceptor 入门
总体步骤 1.自定义一个实现HandlerInterceptor 接口的类比如SignUpHandlerInterceptor(我这边以注册登录拦截器为例). package com.example. ...
- SpringMVC拦截器HandlerInterceptor原理及使用
在使用SpringMVC拦截器的时候,我们接触的最多的便是HandlerInterceptor接口,因为我们所有的自定义拦截器都必须要实现HandlerInterceptor接口,那么就先从Handl ...
- 一篇文章教你弄懂 SpringMvc中的HandlerInterceptor
文章列表 一.HandlerInterceptor简介 一.HandlerInterceptor应用实例 写在前面: 我是「境里婆娑」.我还是从前那个少年,没有一丝丝改变,时间只不过是考验,种在心中信 ...
- Spring Boot——自定义多个拦截器(HandlerInterceptor)配置方法与执行顺序
执行顺序 源代码 拦截器类 package com.jd.m.tg.interceptor;import org.slf4j.Logger; import org.slf4j.LoggerFactor ...
最新文章
- 【青少年编程】【一级】小镇一日游
- python-虎扑爬虫
- Linux基础:让history记录命令的历史执行时间
- 基于ATMEGA8的Arduino Nano(UNO)开发板
- RavenDB FS 安装使用 介绍
- linux制作openssl rpm,CentOS 7 定制 OpenSSL RPM 包
- java arguments_命令行中执行带参数的java程序(Command-Line Arguments)
- python发送邮件脚本_python-发邮件脚本
- 微课系列(8):Python中lambda表达式的变量作用域
- vivo人工智能推荐算法岗提前批面试
- 函数对象function object 以及boost::bind的一点了解
- 用计算机控制人造卫星和导弹发射,广西成人高校计算机实用基础统考理论试题(...
- 前端图片文字复制粘贴功能
- 网络io,select,poll与epoll的初步认识
- js弹窗确认取消php,JS实现删除时的确认弹窗
- 腾达ap设置说明_腾达(Tenda)F3无线信号放大模式(Client+AP)设置 | 192路由网
- 快速排序的时间复杂度与空间复杂度
- 用java编写一个美元汇率转换,编写一个人民币和美元的双向汇率转换程序,实现美元和人民币转换,汇率:1美元=6.92人民币...
- (三)Java的基本程序结构(二)---数据输入、控制流、大数、数组
- JavaScript混淆安全加固
热门文章
- 疯狂ios之cocos2d中的文本
- new 动手学深度学习V2环境安装
- 【前端 · 面试 】TCP 总结(一)—— 概述
- LeetCode:通过递归方法打印杨辉三角形
- SMS动态查询部署安装XPSP3补丁
- django mysql 修改密码_Django更改sqlite数据库使用mysql数据库 - 李金龙
- SQL Server触发器创建、删除、修改、查看
- 使用YAML创建一个 Kubernetes Depolyment
- (转)Managed DirectX +C# 开发(入门篇)(七)
- 湖北孝感学校计算机好吗,湖北省孝感市2018年上半年计算机等级考试注意事项...