SpringAOP中,获取参数名称
来源:互联网 发布:梦幻西游频繁网络错误 编辑:程序博客网 时间:2024/05/30 23:46
由于项目中打印日志的需要,研究了一下在aop中,获取参数名称的方法。
1、jdk1,8中,比较简单,直接通过joinPoint中的getSignature()方法即可获取
Signature signature = joinpoint.getSignature();MethodSignature methodSignature = (MethodSignature) signature;String[] strings = methodSignature.getParameterNames();System.out.println(Arrays.toString(strings));
2.通用方法。比较麻烦
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable{String classType = joinPoint.getTarget().getClass().getName(); Class<?> clazz = Class.forName(classType); String clazzName = clazz.getName(); String methodName = joinPoint.getSignature().getName(); //获取方法名称 Object[] args = joinPoint.getArgs();//参数 //获取参数名称和值 Map<String,Object > nameAndArgs = getFieldsName(this.getClass(), clazzName, methodName,args); System.out.println(nameAndArgs.toString()); //为了省事,其他代码就不写了, return result = joinPoint.proceed(); }
private Map<String,Object> getFieldsName(Class cls, String clazzName, String methodName, Object[] args) throws NotFoundException { Map<String,Object > map=new HashMap<String,Object>(); ClassPool pool = ClassPool.getDefault(); //ClassClassPath classPath = new ClassClassPath(this.getClass()); ClassClassPath classPath = new ClassClassPath(cls); pool.insertClassPath(classPath); CtClass cc = pool.get(clazzName); CtMethod cm = cc.getDeclaredMethod(methodName); MethodInfo methodInfo = cm.getMethodInfo(); CodeAttribute codeAttribute = methodInfo.getCodeAttribute(); LocalVariableAttribute attr = (LocalVariableAttribute) codeAttribute.getAttribute(LocalVariableAttribute.tag); if (attr == null) { // exception } // String[] paramNames = new String[cm.getParameterTypes().length]; int pos = Modifier.isStatic(cm.getModifiers()) ? 0 : 1; for (int i = 0; i < cm.getParameterTypes().length; i++){ map.put( attr.variableName(i + pos),args[i]);//paramNames即参数名 } //Map<> return map; }
0 1
- SpringAOP中,获取参数名称
- Java 8中获取参数名称
- 在Java 8中获取参数名称
- JAVA8中反射获取参数名称
- Spring 中 java 获取方法参数名称
- JS根据参数名称获取URL中参数值
- MVC View中获取action、controller、area名称、参数
- 在struts2中获取请求action名称或参数
- JavaScript获取函数参数名称
- AspectJ 切面获取参数名称和参数
- Java如何获取方法参数中的名称
- java反射获取方法参数名称
- Spring LocalVariableTableParameterNameDiscoverer 获取方法的参数名称
- java8获取方法的参数名称
- java获取方法的参数名称
- 使用Java8获取方法参数名称
- 在Struts2拦截器中获取请求action名称及参数
- 在Struts2拦截器中获取请求action名称及参数
- 意甲官网在中国地区被假网劫持,竟声称赞助?
- linux多线程设计
- 如何爬取了知乎用户信息,并做了简单的分析
- 年龄问题
- 数据链路层---PPP协议
- SpringAOP中,获取参数名称
- Universal Online Judge Documents
- nyoj ACM:士兵杀敌(四)(树状数组)
- 最简单易用的Qt 界面库插件 FTStyle (二)最新版本
- 【mysql】FATAL ERROR: Could not find ./bin/my_print_defaults 解决方法
- 方格填数-用next_permutation()全排列函数做的
- CodeForces 764C Timofey and a tree
- [DP] BZOJ 4758 [Usaco2017 Jan]Subsequence Reversal
- 方程的解