AOP方法拦截获取参数上的注解
https://www.jianshu.com/p/f5c7417a75f9
获取参数注解
在spring aop中,无论是前置通知的参数JoinPoint,还是环绕通知的参数ProceedingJoinPoint,都可以通过以下方法获得入参:
MethodSignature signature= (MethodSignature) jp.getSignature();

getReturnType()可以用在环绕通知中,我们可以根据这个class类型,做定制化操作.而method的参数和参数上的注解,就可以从getMethod()返回的Method对象中拿,api如下:
// 获取方法上的注解
XXX xxx = signature.getMethod().getAnnotation(XXX.class)
//获取所有参数上的注解
Annotation[][] parameterAnnotations= signature.getMethod().getParameterAnnotations();
只有所有的参数注解怎么获取对应参数的值呢?
获取所有参数注解返回的是一个二维数组Annotation[][],每个参数上可能有多个注解,是一个一维数组,多个参数又是一维数组,就组成了二维数组,所有我们在遍历的时候,第一次遍历拿到的数组下标就是方法参数的下标,
for (Annotation[] parameterAnnotation: parameterAnnotations) {
int paramIndex= ArrayUtils.indexOf(parameterAnnotations, parameterAnnotation);
}
再根据Object[] args= joinPoint.getArgs();拿到所有的参数,根据指定的下标即可拿到对象的值
for (Annotation[] parameterAnnotation: parameterAnnotations) {
int paramIndex= ArrayUtils.indexOf(parameterAnnotations, parameterAnnotation);
for (Annotation annotation: parameterAnnotation) {
if (annotation instanceof XXX){
Object paramValue = args[paramIndex]
}
}
}
通过以上方法,即可找到你想要的参数注解,并拿到对应参数的值啦!
AOP方法拦截获取参数上的注解的更多相关文章
- Java获取类方法上的注解
, fullName.indexOf("$$")); try { clz = Class.forName(fullName); } catch (ClassNotFoundExce ...
- spring aop 利用JoinPoint获取参数的值和方法名称
AspectJ使用org.aspectj.lang.JoinPoint接口表示目标类连接点对象,如果是环绕增强时,使用org.aspectj.lang.ProceedingJoinPoint表示连接点 ...
- spring中的多线程aop方法拦截
日常开发中,常用spring的aop机制来拦截方法,记点日志.执行结果.方法执行时间啥的,很是方便,比如下面这样:(以spring-boot项目为例) 一.先定义一个Aspect import org ...
- Android AOP之路三 Android上的注解
一.简单介绍 啥是注解.不懂的能够先看我上一篇文章. 在android 里面 注解主要用来干这么几件事: 和编译器一起给你一些提示警告信息. 配合一些ide 能够更加方便快捷 安全有效的编写java代 ...
- spring boot: filter/interceptor/aop在获取request/method参数上的区别(spring boot 2.3.1)
一,filter/interceptor/aop在获取参数上有什么区别? 1,filter可以修改HttpServletRequest的参数(doFilter方法的功能), interceptor/a ...
- Springboot使用自定义注解实现简单参数加密解密(注解+HandlerMethodArgumentResolver)
前言 我黄汉三又回来了,快半年没更新博客了,这半年来的经历实属不易,疫情当头,本人实习的公司没有跟员工共患难, 直接辞掉了很多人.作为一个实习生,本人也被无情开除了.所以本人又得重新准备找工作了. 算 ...
- Struts2之类范围拦截器和方法拦截器
1.Struts2拦截器的体系结构 Struts2拦截器最大的特点是其透明性,即用户感觉不到它的存在,但我们在使用Struts2框架时,拦截器时时刻刻都在帮助我们处理很多事情. 包括: 文件上传 表单 ...
- [转]解决get方法传递URL参数中文乱码问题
来自:http://www.javaeye.com/topic/483158 应用一:解决tomcat下中文乱码问题(先来个简单的) 在tomcat下,我们通常这样来解决中文乱码问题: 过滤器代码: ...
- 解决get方法传递URL参数中文乱码问题
[转]解决get方法传递URL参数中文乱码问题 来自:http://www.javaeye.com/topic/483158 应用一:解决tomcat下中文乱码问题(先来个简单的) 在tomcat下, ...
随机推荐
- Java生鲜电商平台-优惠券系统的架构设计与源码解析
Java生鲜电商平台-优惠券系统的架构设计与源码解析 电商后台:实例解读促销系统 电商后台系统包括商品管理系统.采购系统.仓储系统.订单系统.促销系统.维权系统.财务系统.会员系统.权限系统等,各系统 ...
- IOC控制反转、Unity简介
参考博客地址: Unity系列文章,推荐:http://www.cnblogs.com/qqlin/archive/2012/10/16/2717964.html https://www.cnblog ...
- vue-cli3和element做一个简单的登陆页面
1.先用vue-cli3创建一个项目 2.安装element模块 全局安装 npm i element-ui -S 3在main.js引入模块 import ElementUI from 'eleme ...
- react 地图可视化 cesium 篇
Vue Function-based API RFC 一出来,感觉 vue 越来越像 react 了.新立项目,决定尝试下 react.js.下面是 react 集成 cesium,核心部分是 web ...
- hitTest和pointInside如何响应用户点击事件
hitTest和pointInside如何响应用户点击事件 处理机制 iOS事件处理,首先应该是找到能处理点击事件的视图,然后在找到的这个视图里处理这个点击事件. 处理原理如下: • 当用户点击屏幕时 ...
- swift之NSDate
在通常项目中一般用的最多的情况就是获取日期并格式化. 1.只需要小时.分钟.秒数时个人觉得使用以下代码 let dateFormater = NSDateFormatter() dateFormate ...
- Python函数使用
Python函数用def指定函数名,可以指定输入参数,可以指定参数的默认值,也可以用return指定返回值.调用时除了默认的位置赋值,也可按关键字赋值. 一.函数不带参数.没有返回值 def hell ...
- Linux—网络防火墙详解
一.防火墙基本知识 二.firewall防火墙 # 安装firewalld [root@localhost ~]# apt-get install firewalld [root@localhost ...
- C语言中变量和函数的作用域和链接属性
C语言中变量和函数的作用域和链接属性 作用域 代码块作用域: 代码块指的是使用"{}"包围起来的部分. 在代码块中定义的变量,代码块之外是不能访问的. 代码块嵌套之后的变量作用域, ...
- php实现图片下载
download.php下载代码 <?php //获取要下载的文件名 $filename = $_GET['filename']; //设置头信息 header('Content-Disposi ...