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;
import com.chinaGPS.driverBook.service.impl.UserManagerService;
public class VLInterface {
public String [] getParamterName(Class className,String method){
String[] paramNames = null;
try {
ClassPool pool = ClassPool.getDefault();
CtClass ctClass = pool.get(className.getName());
CtMethod cm = ctClass.getDeclaredMethod(method);
CtClass[] parameterTypes = cm.getParameterTypes();
MethodInfo methodInfo = cm.getMethodInfo();
CodeAttribute codeAttribute = methodInfo.getCodeAttribute();
LocalVariableAttribute attr = (LocalVariableAttribute) codeAttribute
.getAttribute(LocalVariableAttribute.tag);
paramNames = new String[cm.getParameterTypes().length];
int pos = Modifier.isStatic(cm.getModifiers()) ? 0 : 1;
for (int j = 0; j < paramNames.length; j++)
paramNames[j] = attr.variableName(j + pos);
} catch (NotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return paramNames;
}
public static void main(String[] args) throws NotFoundException, SecurityException, NoSuchMethodException {
new VLInterface().getParamterName(UserManagerService.class, "modifyPwd");
}
}
反射无法获取参数值,只能采用javassist。。。。。
分享到:
相关推荐
赠送jar包:javassist-3.21.0-GA.jar; 赠送原API文档:javassist-3.21.0-GA-javadoc.jar; 赠送源代码:javassist-3.21.0-GA-sources.jar; 赠送Maven依赖信息文件:javassist-3.21.0-GA.pom; 包含翻译后的API文档...
在这种情况下,必须依赖于`MethodParameters`或者使用其他第三方库,如`asm`或`javassist`,这些库可以在运行时解析字节码以获取参数名。 总的来说,获取Java方法的参数名涉及对字节码的理解和可能的调试信息的使用...
1. **类转换**:Javaassist提供了一个名为`ClassPool`的类,它是整个框架的核心,用于管理类的信息。通过`ClassPool`可以获取到Java类的字节码,甚至是从JAR文件或网络上加载类。 2. ** CtClass对象**:`CtClass`是...
`java.lang.instrument.Instrumentation`接口提供了与Java Agent交互的核心功能,如添加类转换器、获取所有已加载类等。 `javassist`是开源的Java字节码操作库,它使得开发者可以在运行时动态创建和修改类。`...
1. **ClassPool**: 这是 Javaassist 的核心组件,它管理着类的集合,可以加载类、创建新类或获取已存在的类。通过 ClassPool,你可以对类进行增删改查的操作。 2. ** CtClass**: 表示一个类,提供了访问和修改类...
你可以指定方法的返回类型、参数类型、方法体等。Javaassist允许使用Java源代码字符串或字节码来定义方法体。 5. **修改方法**:通过`CtMethod`对象,可以修改类中已存在的方法。例如,你可以使用`setBody()`来替换...
Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建的。它已加入了开放源代码...我的项目中主要用于获取方法中的参数名。项目需要。
2. ** CtClass**:这是表示 Java 类的类,提供了丰富的 API 来访问和修改类的信息,如类名、包名、父类、接口、字段和方法。你可以通过 CtClass 实现添加、删除或修改方法体,甚至在类中插入新的字段和方法。 3. **...
可以通过类的全限定名从ClassPool中获取CtClass对象。 3. CtMethod和CtField:分别代表类的方法和字段,用于创建、修改或访问方法和字段。 三、Javassist的使用步骤 1. 引入依赖:在项目中添加Javassist的Maven依赖...
java反射的工具类,可以获得方法的参数名称
要获取参数名称,我们需要借助于字节码解析库,例如ASM、BCEL或javassist。 1. ASM库:ASM是一个强大的Java字节码操控和分析框架。我们可以使用ASM的ClassReader类读取字节码,并通过MethodVisitor接口访问方法信息...
在上面的代码中,我们使用了 JAVAssist 的 ClassPool 和 CtMethod 来获取方法的参数信息,然后使用了 LocalVariableAttribute 来获取方法参数的名称。 通过使用 RequestMappingHandlerMapping 和 JAVAssist,我们...
- 通过定义的`ParameterRef.printInputParameters`和`ParameterRef.printOutputParameters`方法可以获取方法的入参和出参的详细信息,包括参数名、参数类型和参数值,并将它们格式化为XML结构。 结合上述知识点,...
5. **@RequestParam**:处理HTTP请求参数,可以获取查询参数或表单参数。 6. **@ModelAttribute**:用于将请求参数绑定到模型对象,通常用于表单数据的处理。 7. **@Autowired**:自动注入依赖,可以用于注入Bean...
这涉及到对Java字节码的操作,这里我们用到了名为Javassist的库。Javassist是一个强大的框架,它允许我们轻松地读取、修改和创建Java类。 以下是使用Javassist修改Cobalt Strike中`common.CommonUtils`类的方法: ...
这通常需要知道JVM的进程ID,可以通过`jps`命令获取。 5. 调用`VirtualMachine.loadAgent`,传入JavaAgent的路径以及任何必要的参数。 6. JavaAgent的`agentmain`方法会被调用,此时可以使用`Instrumentation`接口...
- `method`参数表示被调用的具体方法,包含了方法名、返回类型以及参数类型等信息。 - `args`参数是一个可变参数,代表了传递给被调用方法的参数列表。 动态代理机制允许我们在不修改已有代码的基础上,扩展或增强...
这篇讲义主要介绍了MyBatis的基础知识、入门程序、核心配置文件详解、手动实现MyBatis框架、在Web中应用MyBatis、使用Javassist生成类、接口代理机制、小技巧、参数处理和查询语句专题,以及动态SQL和高级映射。...
- **`getSimpleName()`**:获取类的简单名称(不包括包名)。 **3.3 获取字段信息** - **`getField(String name)`**:获取公共字段。 - **`getFields()`**:获取所有公共字段。 - **`getDeclaredField(String name...
在这个例子中,我们创建了一个名为`printName`的方法,该方法无参数,无返回值,打印出字段`name`的值。 6. **生成类并保存到磁盘**: 最后,通过调用`toClass`方法将`CtClass`对象转换为实际的Java类,并可选择将...