1、新建MethodVariableNameUtil.java
package com.yykj.test.spring;
import java.lang.reflect.Modifier;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.bytecode.CodeAttribute;
import javassist.bytecode.LocalVariableAttribute;
import javassist.bytecode.MethodInfo;
public class MethodVariableNameUtil {
public static void main(String[] args) {
String[] names=getMethodVariableName("com.yykj.test.spring.MethodVariableNameUtilTest","test3");
for(String name:names)
{
System.out.println(name);
}
}
public static String[] getMethodVariableName(String classname,String methodname){
try{
ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.get(classname);
CtMethod cm = cc.getDeclaredMethod(methodname);
MethodInfo methodInfo = cm.getMethodInfo();
CodeAttribute codeAttribute = methodInfo.getCodeAttribute();
String[] paramNames = new String[cm.getParameterTypes().length];
LocalVariableAttribute attr = (LocalVariableAttribute) codeAttribute.getAttribute(LocalVariableAttribute.tag);
if (attr != null) {
int pos = Modifier.isStatic(cm.getModifiers()) ? 0 : 1;
for (int i = 0; i < paramNames.length; i++){
paramNames[i] = attr.variableName(i + pos);
}
return paramNames;
}
}catch(Exception e){
System.out.println("getMethodVariableName fail "+e);
}
return null;
}
}
2、测试类文件MethodVariableNameUtilTest.java
package com.yykj.test.spring;
import org.junit.Test;
public class MethodVariableNameUtilTest {
@Test
public static void main(String[] args) {
}
public String test(String a,String b,String c) {
return "hello";
}
public static String test2(String a,String b,String c) {
return "hello";
}
public static String test3(String p1,String p2,String c) {
return "hello";
}
}
3、点击MethodVariableNameUtil.java文件的类文件名,右键,选择Java Application就可以测试了