过滤器和拦截器 和 aop 有什么区别
https://blog.csdn.net/zxd1435513775/article/details/80556034
- Filter过滤器:拦截web访问url地址。 这个比拦截器范围广,过滤器是大集合,拦截器是大集合中的小集合。而且任何url是先经过过滤器后才进入拦截器的。
- Interceptor拦截器:拦截url以action结尾或者没有后缀的,没有后缀拦截器会认为是.action结尾。。 如:struts2拦截器、spring拦截器
- Spring AOP拦截器:只能拦截Spring管理Bean的访问(业务层Service),就是说执行某个bean容器中方法时进行拦截,而不是对url。
AOP(面向切面)
面向切面拦截的是类的元数据(包、类、方法名、参数等)
相对于拦截器更加细致,而且非常灵活,拦截器只能针对URL做拦截,而AOP针对具体的代码,能够实现更加复杂的业务逻辑。具体类型参照其他博客。
三者使用场景
三者功能类似,但各有优势,从过滤器--》拦截器--》切面,拦截规则越来越细致,执行顺序依次是过滤器、拦截器、切面。一般情况下数据被过滤的时机越早对服务的性能影响越小,因此我们在编写相对比较公用的代码时,优先考虑过滤器,然后是拦截器,最后是aop。比如权限校验,一般情况下,所有的请求都需要做登陆校验,此时就应该使用过滤器在最顶层做校验;日志记录,一般日志只会针对部分逻辑做日志记录,而且牵扯到业务逻辑完成前后的日志记录,因此使用过滤器不能细致地划分模块,此时应该考虑拦截器,然而拦截器也是依据URL做规则匹配,因此相对来说不够细致,因此我们会考虑到使用AOP实现,AOP可以针对代码的方法级别做拦截,很适合日志功能。