博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC项目中,什么情况在控制层使用的AOP,什么情况使用拦截器?
阅读量:6554 次
发布时间:2019-06-24

本文共 887 字,大约阅读时间需要 2 分钟。

hot3.png

整合各位知乎大神的回答,梳理下思维;

1. 拦截器是aop的实现 ; 这句话就可以说明,拦截器可以实现的,aop均可以实现, 但优势在于拦截器是专门封装的, 可以免去在一起封装,拿来即用;

先说说aop,注解方式的

@Before @After @AfterReturning @AfterThrowing @Around

使你在时机上有更多的选择,也更标准.

executionwithin thistargetargs @target @args@within@annotation

Pointcut让你在使用的位置空间上更加自由.

2.HandlerInterceptor和servlet的Filter比较相似,是一个链式的处理模式,每个请求都会在这个链下跑一遍,实际上很多请求我们是不想去处理的,如果在方法里判断显得很不spring.

而自己用AOP实现,一切皆可配置,不需要的方法不去拦截(配合annotation使用) 

总之: 如果是特别简单的功能又是通用的,每个请求都要去处理的,比如判断token是否失效,失效直接返回401可以使用spring自带的HanlderIntercept, 复杂的,比如缓存,需要高度自定义,高度可配置,高度可插拔,非必要拦截,就自己用AOP倒腾吧

 3.个人觉得,有必要用到request和response的时候,一般只在controller层,可以用拦截器。否则aop更好,因为aop通过IDE的提示可以让你更容易的找到aop的实现,而拦截器必须得去翻配置,另外aop在具体实现上面会比拦截器更简单。

4.系统全局的异常捕获用AOP,避免将异常栈信息暴露给客户端;

一些接口的预处理,比如根据Header中的token参数查询出对应的User对象,set到request中并向后传递。
对于普通的业务逻辑来说,他们二者基本都是可以互换的。

 

 

原文-知乎: https://www.zhihu.com/question/39510340 

转载于:https://my.oschina.net/java1314/blog/834191

你可能感兴趣的文章
类的生命周期
查看>>
php apache用户写文件夹权限设置
查看>>
003-诠释 Java 工程师【一】
查看>>
浅析rune数据类型
查看>>
普通用户开启AUTOTRACE 功能
查看>>
1034 - Navigation
查看>>
Bind+Nginx实现负载均衡
查看>>
游侠原创:推荐一款免费的Syslog转发工具
查看>>
巧用Zabbix自定义监控Mysql性能状态
查看>>
UIKeyboard键盘相关知识点-IOS开发
查看>>
你真的会 snapshot 吗? - 每天5分钟玩转 OpenStack(163)
查看>>
onAttachedToWindow和onDetachedFromWindow调用时机源码解析
查看>>
虚拟机外接USB设备情况的vMotion问题
查看>>
Mysql数据库大小查询
查看>>
#78 Reimplement Trampoline
查看>>
使用Java制作图文验证码
查看>>
java学习笔记----之多线程开发
查看>>
使用javap分析return和finally的执行字节码
查看>>
java 代理
查看>>
数据库设计三范式
查看>>