Spring Aop 如何获取参数名参数值

网友投稿 1064 2022-12-26

Spring Aop 如何获取参数名参数值

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 classvejzVVYup DemoAop {

/**

* 环绕通知

* @param proceedingJoinPoint

* @return

* @throws Throwable

*/

@Around(value = "execution(* com.example.aopdemo..*(..)))")

public Object demoAop(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {

log.debug("执行前:");

Map params = getNameAndVavejzVVYuplue(proceedingJoinPoint);

for (Map.Entry 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 getNameAndValue(ProceedingJoinPoint joinPoint) {

Map 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

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Springboot 读取自定义pro文件注入static静态变量方式
下一篇:flutter 安卓(Flutter 安卓缩小了)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~