Spring Aop 如何获取参数名参数值
作者:小动物不困i 发布时间:2022-09-08 17:00:41
标签:Spring,Aop,参数名,参数值
前言:
有时候我们在用Spring Aop面向切面编程,需要获取连接点(JoinPoint)方法参数名、参数值。
环境:
Mac OSX
Intellij IDEA
Spring Boot 2x
Jdk 1.8x
Code:
package com.example.aopdemo.aop;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.CodeSignature;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
* DemoAop
* Create by Gray(Ganguocai@outlook.com)
*/
@Aspect
@Component
@Slf4j
public class DemoAop {
/**
* 环绕通知
* @param proceedingJoinPoint
* @return
* @throws Throwable
*/
@Around(value = "execution(* com.example.aopdemo..*(..)))")
public Object demoAop(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
log.debug("执行前:");
Map<String, Object> params = getNameAndValue(proceedingJoinPoint);
for (Map.Entry<String, Object> entry : params.entrySet()) {
System.out.println("name: " + entry.getKey() + " value: " + entry.getValue());
}
Object object = proceedingJoinPoint.proceed(); //执行连接点方法,object:方法返回值
log.debug("执行后:");
return object;
}
/**
* 获取参数Map集合
* @param joinPoint
* @return
*/
Map<String, Object> getNameAndValue(ProceedingJoinPoint joinPoint) {
Map<String, Object> param = new HashMap<>();
Object[] paramValues = joinPoint.getArgs();
String[] paramNames = ((CodeSignature)joinPoint.getSignature()).getParameterNames();
for (int i = 0; i < paramNames.length; i++) {
param.put(paramNames[i], paramValues[i]);
}
return param;
}
}
AOP切面获取参数的一个小技巧
一般来说,我们的参数,都是通过json传递的,那么这个问题就转化成了,从json中获取指定字符串的问题。
OK,这个问题就简单了。
如下:
public static void main(String[] args) {
// 这里JSONObject是fastjson-1.2.41.jar包下的
JSONObject jsonObject = JSON.parseObject("{\"timeStamp\":21602756894612,\"status\":0,\"results\":{\"userName\":\"yang20102\",\"userLevel\":\"3\"},\"errorCode\":null,\"errorMessage\":null}");
// 获取json最外层字符串
Object timeStamp = jsonObject.get("timeStamp");
System.out.println("timeStamp:" + timeStamp);
// 获取复杂对象
Object results = jsonObject.get("results");
JSONObject jsonObjectResults = JSON.parseObject(results.toString());
Object userName = jsonObjectResults.get("userName");
System.out.println("userName:" + userName);
}
实例json如下:
{
"timeStamp": 21602756894612,
"status": 0,
"results": {
"userName": "yang20102",
"userLevel": "3"
},
"errorCode": null,
"errorMessage": null
}
来源:https://blog.csdn.net/weixin_39931896/article/details/83451311
0
投稿
猜你喜欢
- 先上效果图: 工具类在解析的过程中,我们会和byte做各种运算,所以我定义了一个byte工具类ByteUtils:using Sy
- Spring自动装配之方法、构造器位置的自动注入1. 注解定义@Autowired的定义信息如下:@Target({ElementType.
- 理解C#中的闭包1、 闭包的含义首先闭包并不是针对某一特定语言的概念,而是一个通用的概念。除了在各个支持函数式编程的语言中,我们会接触到它。
- 本文主要介绍了java(包括springboot)读取resources下文件方式实现,分享给大家,具体如下:1、使用项目内路径读取,该路径
- 部分情况下无法通过maven仓库直接下载需要的jar包,只能讲jar包下载至本地来使用,spring boot框架内通过maven加载第三方
- 前言在实际生活中,地图是我们经常使用的一种工具,通常我们会用它进行导航,输入一个出发城市,输入一个目的地城市,就可以把路线规划好,而在规划好
- 一、java final基本概念:1、主要用于修饰类、属性和方法:被final修饰的类不可以被继承被final修饰的方法不可以被重写被fin
- 最近要做一个java web项目,因为页面不是很多,所以就没有前后端分离,前后端写在一起,这时候就用到thymeleaf了,以下是不动脑式的
- 关于Maven的使用就不再啰嗦了,网上很多,并且这么多年变化也不大,这里仅介绍怎么搭建Hadoop的开发环境。1. 首先创建工程mvn ar
- 最近项目中需要实现定时执行任务,比如定时计算会员的积分、调用第三方接口等,由于项目采用spring框架,所以这里结合spring框架来介绍。
- 前言众所周知在spring boot内,设置session过期时间只需在application.properties内添加server.se
- 什么是ServletContext?根据字面意思即Servlet上下文服务器会为每一个工程创建一个对象,这个对象就是ServletConte
- 如果有哪一个做程序员的小伙伴说自己没有遇到中文乱码问题,我是不愿意相信的。今天在做微信订阅号的智能回复时,又一时迷乱的跳进了中文乱码这个火坑
- 阿里终面在线编程题,写出来与大家分享一下 有一个单向链表
- 如果你是一名Web开发人员,那么用膝盖想也知道你的职业生涯大部分将使用Java而度过。这是一款商业级的编程语言,我们没有办法不接触它。对于J
- 在项目中遇到try...catch...语句,因为对Java异常处理机制的流程不是很清楚,导致对相关逻辑代码不理解。所以现在来总结Java异
- 1.先导入以下两个jar包2.jsp文件表单必须是post提交,编码必须是multipart/form-data 文件上传文本框必须起名。3
- 前言这篇博客介绍Java环境的配置,主要是安装JDK,以及path、JAVA_hOME、CLASSPAT的配置,还会介绍配置这些的原因。一.
- 1,Java中操作方法:import java.io.*; public class FileInputStreamTest &
- AOP事务管理<aop:advisor>两种配置方式方式一@transactionManagerbean.xml<?xml