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/>

HandlerInterceptor与MethodInterceptor的更多相关文章

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

    目录 C# VS JAVA 基础语法类比篇: 一.匿名类 二.类型初始化 三.委托(方法引用) 四.Lambda表达式 五.泛型 六.自动释放 七.重写(override) ASP.NET CORE ...

  2. ASP.NET CORE(C#)与Spring Boot MVC(JAVA)

    干货分享:ASP.NET CORE(C#)与Spring Boot MVC(JAVA)异曲同工的编程方式总结   目录 C# VS JAVA 基础语法类比篇: 一.匿名类 二.类型初始化 三.委托(方 ...

  3. springboot拦截器总结

    Springboot 拦截器总结 拦截器大体分为两类 : handlerInterceptor 和 methodInterceptor 而methodInterceptor 又有XML 配置方法 和A ...

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

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

  5. Spring 拦截器实现+后台原理(MethodInterceptor)

    MethodInterceptor MethodInterceptor是AOP项目中的拦截器(注:不是动态代理拦截器),区别与HandlerInterceptor拦截目标时请求,它拦截的目标是方法. ...

  6. Spring 拦截器实现+后台原理(HandlerInterceptor)

    过滤器跟拦截器的区别 spring mvc的拦截器是只拦截controller而不拦截jsp,html 页面文件的.这就用到过滤器filter了,filter是在servlet前执行的,你也可以理解成 ...

  7. springmvc(3)拦截器HandlerInterceptor源码的简单解析

    其实拦截器就是我们的AOP编程.拦截器在我们的实际项目中实用性比较大的,比如:日志记录,权限过滤,身份验证,性能监控等等.下面就简单的来研究一下拦截器: public interface Handle ...

  8. Spring自定义一个拦截器类SomeInterceptor,实现HandlerInterceptor接口及其方法的实例

    利用Spring的拦截器可以在处理器Controller方法执行前和后增加逻辑代码,了解拦截器中preHandle.postHandle和afterCompletion方法执行时机. 自定义一个拦截器 ...

  9. Spring3 报org.aopalliance.intercept.MethodInterceptor问题解决方法

    原文:Spring3 报org.aopalliance.intercept.MethodInterceptor问题解决方法 一 开发环境:JDK5+Spring3.0.5+Myeclipse6.6+T ...

随机推荐

  1. Net系列框架-Dapper+AutoFac 基于接口

    Net系列框架-Dapper+AutoFac 基于接口 工作将近6年多了,工作中也陆陆续续学习和搭建了不少的框架,后续将按由浅入深的方式,整理出一些框架源码,所有框架源码本人都亲自调试通过,如果有问题 ...

  2. mysql--对库,表基本操作语句,增删改查

    1.对数据库的操作 1.选择数据库 USE 数据库名 2.创建数据库 create database 数据库名 charset utf8; 可以由字母.数字.下划线.@.#.$ 区分大小写 唯一性 不 ...

  3. 基于scrapy-redis两种形式的分布式爬虫

    redis分布式部署 1.scrapy框架是否可以自己实现分布式? - 不可以.原因有二. 其一:因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls ...

  4. C#取得控制台应用程序的根目录方法

    如有雷同,不胜荣幸,若转载,请注明 取得控制台应用程序的根目录方法1:Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径2:AppDomain.Curren ...

  5. 【UI组件】——用jQuery做一个上拉刷新

    技术要点: 1.jQuery的插件写法 2.上拉刷新步骤分解 3.css样式 jQuery的插件写法: $.fn.pluginName = function() { return this.each( ...

  6. http协议缓存小结

    缓存可以使用expire方式,设置到期时间,缓存的时间等于expire设置的时间减去当前的时间 也可以使用no-cache的方式进行缓存,当设置了no-cache的方式时,以no-cache的为准,e ...

  7. KMP算法再解 (看毛片算法真是人如其名,哦不,法如其名。)

    KMP算法主要解决字符串匹配问题,其中失配数组next很关键: 看毛片算法真是人如其名,哦不,法如其名. 看了这篇博客,转载过来看一波: 原博客地址:https://blog.csdn.net/sta ...

  8. ownCloud问题处理server replied 423 Locked to

    打开owncloud 数据库备份:oc_file_locks表(备份免错哦)然后清空该表,客户端同步一次,故障解决 owncloud大的数据无法同步..

  9. [转] Ansible 内置变量参考

    Quick reference for Ansible variables [From] https://github.com/lorin/ansible-quickref

  10. 剑指offer——面试题27:二叉树的镜像

    函数递归 void MirrorIteratively(BinaryTreeNode* pRoot) { if(pRoot == nullptr) return; std::stack<Bina ...