SpringMVC的AOP总结

news2025/2/4 15:03:37

SpringMVC的AOP总结

1、Filter 过滤器

  • Filter是Servlet规范中规定的,只能用于WEB中, 在Servlet前后起作用

  • 它可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次

  • 使用场景: 修改字符编码; 对入参进行校验, 校验不通过返回错误信息.

  • 原理: 基于函数回调( filterchain)的方式调用

2、Interceptor 拦截器

  • 拦截器是Spring容器内的,是Spring框架支持的,可以使用Spring内的任何资源、对象

  • 可以深入到方法的调用前后、异常抛出前后等深层次的程度做处理

  • 缺点是只能对 Controller 请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理

  • 原理: 基于Java的反射机制,属于面向切面编程(AOP)的一种运用

  • 使用场景: 对入参进行校验

3、RequestBodyAdvice

  • 配合 @ControllerAdvice 和 @RequestBody 注解使用, 可以拦截所有的请求. 如果不使用 @RequestBody 修饰入参对象, 不会拦截

  • 原理: AOP

  • 使用场景: 参数的过滤,字符的编码,第三方的解密

4、ResponseBodyAdvice

  • 拦截Controller方法默认返回参数,统一处理返回值/响应体

  • 使用场景: 对控制层的返回结果进行加密

  • 原理: AOP

5、AOP使用

  • 面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等

  • 使用场景: 统一记录控制层请求日志以及返回结果

用法总结

  • 如果是拦截静态资源,需要使用过滤器;

  • 如果是参数校验,可以使用拦截器实现;

  • 如果对参数加解密,可以使用RequestBodyAdivce 和ResponseBodyAdvice;

  • 如果是记录访问日志,可以使用 AOP.

拦截顺序是:filter—>Interceptor–>ControllerAdvice–>@Aspect -->Controller;

程序执行的顺序是先进过滤器,再进拦截器,最后进切面。注意:如果拦截器中preHandle方法返回的为false时,则无法进入切面.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/103427.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java实验报告之Employee类的设计

一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion:2022.12.20 Last edited: 2022.12.20 目录 一、实验目的 二、实验内容 三、总体设计(设计原理、设计方案及流程等) 四…

Python数据结构+算法全面讲解:定义函数、定义类

之前的过程抽象例子调用了 Python数学模块中的 sqrt 函数来计算平方根。通常来说,可以 通过定义函数来隐藏任何计算的细节。函数的定义需要一个函数名、一系列参数以及一个函数体。 函数也可以显式地返回一个值。例如,下面定义的简单函数会返回传入值的平方。 >>> …

使用 Appium 报错“... Could not find ‘adb‘ in ...”

使用 Appium 报错 “... Could not find adb in ...”1. 现象2. 问题定位3. 解决方案4. 验证1. 现象 在 Robot Framework 中使用 Open Application 关键字以通过 Appium 来打开模拟器上的应用报错: WebDriverException: Message: An unknown server-side error occ…

Transformer17

还是transformer 这次还是谷歌哈 又在机器人领域发力 谷歌机器人团队等在机器人领域构建了一个多任务 transformer 模型,显著改进了对新任务、环境和对象的零样本泛化。轻松完成700多条指令、成功率达97%!谷歌开源机器人领域 我们知道,机器…

Docker搭建MySQL主从集群

使用Docker搭建一主一从的MySQL集群,使用的是8版本的MySQL镜像不是8的版本部分命令会无效,宿主机任意 规划 端口角色3307master3308slave 思路 事先准备 要确保linux宿主机已经安装上Docker。然后将MySQL镜像下载到本地 ,可以先去Docker Hu…

ssm java mysql_医院门诊管理系统_

息化不断建设发展的今天,医院看病预约,医生的挂号等,已经十分方便,通过在线挂号,医生的查看,就能够了解到医院的门诊基本信息,并且可以在线进行门诊的医生查看,医院最新的资讯等&…

Golang 【basic_leaming】切片

阅读目录1、为什么要使用切片2、切片的定义3、关于nil 的认识4、切片的循环遍历5、基于数组定义切片6、切片再切片7、关于切片的长度和容量8、切片的本质9、使用 make() 函数构造切片10、切片不能直接比较11、切片是引用数据类型 -- 注意切片的赋值拷贝12、append() 方法为切片…

Mycat(10):分片详解之固定分片hash算法

1 找到conf/schema.xml并备份 2 固定分片hash算法 本条规则类似于十进制的求模运算,区别在于是二进制的操作,是取id的二进制低10位,即id二进制 。 此算法的优点在于如果按照 10进制取模运算,在连续插入1-10 时候1-10会被分到1-10个分片&…

手机号格式检查系统(Java)

本系统支持的手机号检查如下所示: /** * 中国移动,中国联通,中国电信都为11位的手机号 * 中国"移动"前三位: * 135、136、137、138、139、147、150、151、152、157、 * 158、159、172、178、182、183、184、187、188、195、197、19…

铝网初效过滤器及金属网过滤器的区别

广州特耐苏净化设备有限公司详细介绍:粗效过滤器主要技术参数 什么叫铝网初效过滤器及金属网过滤器?铝网初效过滤器也叫金属网过滤器也可叫GH金属孔网过滤器只是人们的叫法不同。 铝网初效过滤器均具安全,坚固,耐高温,耐酸碱,之特性.一般应…

WebDAV之葫芦儿•派盘+Obsidian笔记

Obsidian 支持WebDAV方式连接葫芦儿派盘。 还在为大量的日记、笔记管理而烦恼?推荐一款可以作为第二大脑、支持双向链接、基于Markdown文件的本地知识管理软件。 Obsidian是一款全设备端的笔记软件,让用户能够非常方便的进行笔记上面的记录,纸张无限边界,想到哪,写到哪,不…

点成分享 | 蛋白质浓度测定之BCA法

蛋白质浓度的测定是常见的生物实验之一。本文介绍的是使用BCA法(二辛可酸法或二喹啉甲酸法)进行蛋白质浓度的测定。 BCA分子式 1 实验原理 BCA是一种稳定的碱性水溶性复合物。在碱性条件下,蛋白质可以将BCA试剂中的二价铜离子Cu2还原成一价…

C++类和对象(上)

学习“类”不“类”,有“对象”了吗? 目录 面向过程和面向对象 类的引入 类的定义 访问限定符 封装 类的作用域 类的实例化 类对象的存储方式 计算类对象的大小 this指针 this指针的特性 this指针两问 面向过程和面向对象 ●C语言是面向过程的…

【Javassist】快速入门系列03 使用Javassist实现方法异常处理

系列文章目录 01 在方法体的开头或结尾插入代码 02 使用Javassist实现方法执行时间统计 03 使用Javassist实现方法异常处理 文章目录系列文章目录前言引入Javassist jar包使用Javassist实现方法异常处理总结说明前言 上一章我们介绍了使用使用Javassist实现了对方法执行时间的…

07_哈希表

哈希表 1.为什么需要构建哈希表 现在有一组数据,我们想查找一个值(x)是否在这组数据中,通常来说,我们需要把这组数据遍历一遍,来看看有没有x这个值。 这时,我们发现这样查找数据要花费的时间…

C++ 类和对象

C认为万事万物都皆为对象,对象上有其属性和行为,C面向对象的三大特性为:封装、继承、多态。 一. 封装 封装是C面向对象三大特性之一。 封装的意义: 将属性和行为作为一个整体,表现生活中的事物将属性和行为加以权限控…

【数据库】时间戳并发控制

Timestamp ordering(T/O) 根据事务的时间戳来决定顺序。 如果T1 的时间戳小于T2 的时间戳,那么执行的结果要等价于T1 执行早于T2 的执行。 时间戳的实现策略: 系统时钟 逻辑计数 混合方法 Basic Timestamp Ordering(T/O)Prtot…

【WPF绑定2】 ComboBox MVVM SelectedValue复杂数据类型绑定

前言 这次绑定是一次非常痛苦的经历,因为SelectedValue总是不能生效!我一度怀疑是wpf的Bug。其实还是自己没搞清楚。 在之前的一篇文章中: http://t.csdn.cn/A4W6Ahttp://t.csdn.cn/A4W6A我也写个ComboBox的绑定,但是当时没有指…

【实时数仓】DWM层订单宽表之实现基本的维度查询、加入旁路缓存模式

文章目录一 DWM层-订单宽表1 维表关联代码实现(1)首先实现基本的维度查询功能a 封装Phoenix查询的工具类PhoenixUtilb 封装查询维度的工具类DimUtil(2) 优化1:加入旁路缓存模式a 缓存策略的几个注意点b 缓存的选型c 在…

AnimateGAN 迁移部署

文章目录1. 模型概述2. 迁移过程2.1 将ckpt的权重文件转换为pb的权重文件。2.2 将pb的权重文件迁移为 BM1684 bmodel模型2.3 迁移后pipeline搭建2.4 使用streamlit部署3. 效果展示AnimateGAN 是一个基于 GAN 的动漫生成模型,可以将真实的场景照片转换成动漫形式。本…