`

利用javassist获取java的方法参数名

    博客分类:
  • java
 
阅读更多
import java.lang.reflect.Method;

import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.Modifier;
import javassist.NotFoundException;
import javassist.bytecode.CodeAttribute;
import javassist.bytecode.LocalVariableAttribute;
import javassist.bytecode.MethodInfo;

public class MethodUtil {

    public static String[] getAllParamaterName(Method method)
	    throws NotFoundException {
	Class<?> clazz = method.getDeclaringClass();
	ClassPool pool = ClassPool.getDefault();
	CtClass clz = pool.get(clazz.getName());
	CtClass[] params = new CtClass[method.getParameterTypes().length];
	for (int i = 0; i < method.getParameterTypes().length; i++) {
	    params[i] = pool.getCtClass(method.getParameterTypes()[i].getName());
	}
	CtMethod cm = clz.getDeclaredMethod(method.getName(), params);
	MethodInfo methodInfo = cm.getMethodInfo();
	CodeAttribute codeAttribute = methodInfo.getCodeAttribute();
	LocalVariableAttribute attr = (LocalVariableAttribute) codeAttribute
		.getAttribute(LocalVariableAttribute.tag);
	int pos = Modifier.isStatic(cm.getModifiers()) ? 0 : 1;
	String[] paramNames = new String[cm.getParameterTypes().length];
	for (int i = 0; i < paramNames.length; i++) {
	    paramNames[i] = attr.variableName(i + pos);
	}
	return paramNames;
    }

}





测试类:
import static org.junit.Assert.assertArrayEquals;
import java.lang.reflect.Method;
import org.junit.Test;

public class MethodUtilTest {
    @Test
    public void methodTest() throws Exception {
	Method method = A.class.getMethod("test", String.class);
	String[] paramaterName = MethodUtil.getAllParamaterName(method);
	assertArrayEquals(paramaterName, new String[] { "name" });
    }

}



测试用到的例子类
public class A {
    
    public String test(String name) {
	return name;
    }

}


0
0
分享到:
评论

相关推荐

    javaagent+javassist

    环境JDK1.8 IDEA项目 javaagent+javassist 下载后导入即可

    借助jclasslib与javassist修改java class字节码

    借助jclasslib与javassist修改java class字节码.doc

    javassist, Java字节码工程工具包.zip

    javassist, Java字节码工程工具包 Java字节码工程工具包 版本 3版权所有( C ) 1999 -2017按 Shigeru Chiba,保留所有权利。Javassist ( Java编程助手) 使Java字节码操作简单。 它是一个类库,用于在Java中编辑字节码

    javassist+javaAgent探针, 实现jvm退出时打印线程栈日志

    javassist+javaAgent探针, 实现jvm退出时打印线程栈日志,方便排查是哪个线程调用了退出,以及退出码

    JavaAgent:Javassist 与 Asm JavaAgent 字节码动态编程项目

    JavaAgent Javassist 与 Asm JavaAgent 字节码动态编程项目

    Javassist 修改class字节码

    Javassist 提供了java类库,用于方便操控Java字节码。功能包括:运行时创建java class,修改class。与其他同类工具(asm等)不同的是,Javassist提供了两个层面的API: 1.java代码层 2.字节码层 通过java代码层,...

    javassist-3.19.0-GA-API文档-中文版.zip

    标签:javassist、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    javassist-3.23.1-GA-API文档-中文版.zip

    标签:javassist、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    开发工具 javassist-3.21.0-GA

    开发工具 javassist-3.21.0-GA开发工具 javassist-3.21.0-GA开发工具 javassist-3.21.0-GA开发工具 javassist-3.21.0-GA开发工具 javassist-3.21.0-GA开发工具 javassist-3.21.0-GA开发工具 javassist-3.21.0-GA开发...

    java 反编译工具 jboss-javassist

    能够实现java包的重写,分析,java程序的利器,不会的可以网上搜索相关使用方法,也可以留言求助。内含java包及demo,使用时直接引用java包即可。

    javassist-3.24.0-GA-API文档-中文版.zip

    标签:javassist、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    jboss-javassist-javassist-rel_3_25_0_ga-2-g9076bde.zip

    Javassist (Java Programming Assistant) makes Java bytecode manipulation simple. It is a class library for editing bytecodes in Java; it enables Java programs to define a new class at runtime and to ...

    javassist-3.27.0-GA-API文档-中英对照版.zip

    标签:javassist、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 ...

    javassist,Java字节码工程工具包.zip

    Java字节码工程工具包

    javassist试图简化Java字节码的编辑

    javassist:试图简化Java字节码的编辑

    javassist-3.24.0-GA-API文档-中英对照版.zip

    标签:javassist、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 ...

    javassist-3.21.0-GA-API文档-中文版.zip

    标签:javassist、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    javassist:Java字节码工程工具包

    Javassist(JAVA编程ASSISTant)使Java字节码操作变得简单。 它是一个用Java编辑字节码的类库。 它使Java程序可以在运行时定义新类,并在JVM加载它时修改类文件。 与其他类似的字节码编辑器不同,Javassist提供了两...

    javassist-3.23.1-GA-API文档-中英对照版.zip

    标签:javassist、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 ...

Global site tag (gtag.js) - Google Analytics