Java通过ASM 获取方法参数名称

推荐:https://segmentfault.com/a/1190000004976168
https://www.cnblogs.com/relucent/p/6525821.html
https://blog.csdn.net/z69183787/article/details/46762435

依赖

原 asm 已经迁移到 org.ow2.asm

<dependency>
    <groupId>org.ow2.asm</groupId>
    <artifactId>asm</artifactId>
    <version>7.1</version>
</dependency>

注意

在web工程中(如:使用tomcat容器),不能使用下面方式,会无法读取 .class 文件

String className = method.getDeclaringClass().getName();
ClassReader cr = new ClassReader(className);

因为 ClassReader 中使用的是 ClassLoader 类加载器,在 tomcat等容器中,使用的是自己实现的类加载器,导致 ClassLoader 类加载器读取不到 classes 目录下的文件

应该使用下面方式:

InputStream in = clazz.getResourceAsStream("/" + clazz.getName().replace('.', '/') + ".class")

ClassReader cr = new ClassReader(in);