`
qq123zhz
  • 浏览: 536170 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

javassist获得参数名

    博客分类:
  • java
 
阅读更多
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。。。。。

分享到:
评论

相关推荐

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

    赠送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文档...

    Java获取代码中方法参数名信息的方法

    在这种情况下,必须依赖于`MethodParameters`或者使用其他第三方库,如`asm`或`javassist`,这些库可以在运行时解析字节码以获取参数名。 总的来说,获取Java方法的参数名涉及对字节码的理解和可能的调试信息的使用...

    javassistDemo

    1. **类转换**:Javaassist提供了一个名为`ClassPool`的类,它是整个框架的核心,用于管理类的信息。通过`ClassPool`可以获取到Java类的字节码,甚至是从JAR文件或网络上加载类。 2. ** CtClass对象**:`CtClass`是...

    agent+javassist例子

    `java.lang.instrument.Instrumentation`接口提供了与Java Agent交互的核心功能,如添加类转换器、获取所有已加载类等。 `javassist`是开源的Java字节码操作库,它使得开发者可以在运行时动态创建和修改类。`...

    javassist-3.15.0-GA

    1. **ClassPool**: 这是 Javaassist 的核心组件,它管理着类的集合,可以加载类、创建新类或获取已存在的类。通过 ClassPool,你可以对类进行增删改查的操作。 2. ** CtClass**: 表示一个类,提供了访问和修改类...

    javassist demo

    你可以指定方法的返回类型、参数类型、方法体等。Javaassist允许使用Java源代码字符串或字节码来定义方法体。 5. **修改方法**:通过`CtMethod`对象,可以修改类中已存在的方法。例如,你可以使用`setBody()`来替换...

    Javassist-3.12

    Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建的。它已加入了开放源代码...我的项目中主要用于获取方法中的参数名。项目需要。

    javassist-3.18.2-GA.jar

    2. ** CtClass**:这是表示 Java 类的类,提供了丰富的 API 来访问和修改类的信息,如类名、包名、父类、接口、字段和方法。你可以通过 CtClass 实现添加、删除或修改方法体,甚至在类中插入新的字段和方法。 3. **...

    Javassist如何操作Java 字节码

    可以通过类的全限定名从ClassPool中获取CtClass对象。 3. CtMethod和CtField:分别代表类的方法和字段,用于创建、修改或访问方法和字段。 三、Javassist的使用步骤 1. 引入依赖:在项目中添加Javassist的Maven依赖...

    javassist反射类

    java反射的工具类,可以获得方法的参数名称

    java实现根据方法查看方法参数名称

    要获取参数名称,我们需要借助于字节码解析库,例如ASM、BCEL或javassist。 1. ASM库:ASM是一个强大的Java字节码操控和分析框架。我们可以使用ASM的ClassReader类读取字节码,并通过MethodVisitor接口访问方法信息...

    详解获取Spring MVC中所有RequestMapping以及对应方法和参数

    在上面的代码中,我们使用了 JAVAssist 的 ClassPool 和 CtMethod 来获取方法的参数信息,然后使用了 LocalVariableAttribute 来获取方法参数的名称。 通过使用 RequestMappingHandlerMapping 和 JAVAssist,我们...

    使用代理打印出详细的入参出参

    - 通过定义的`ParameterRef.printInputParameters`和`ParameterRef.printOutputParameters`方法可以获取方法的入参和出参的详细信息,包括参数名、参数类型和参数值,并将它们格式化为XML结构。 结合上述知识点,...

    SpringMVC纯注解配置

    5. **@RequestParam**:处理HTTP请求参数,可以获取查询参数或表单参数。 6. **@ModelAttribute**:用于将请求参数绑定到模型对象,通常用于表单数据的处理。 7. **@Autowired**:自动注入依赖,可以用于注入Bean...

    Cobal_Strike_自定义OneLiner_Evi1cg's_blog1

    这涉及到对Java字节码的操作,这里我们用到了名为Javassist的库。Javassist是一个强大的框架,它允许我们轻松地读取、修改和创建Java类。 以下是使用Javassist修改Cobalt Strike中`common.CommonUtils`类的方法: ...

    JavaAgent例子-agentmain方式

    这通常需要知道JVM的进程ID,可以通过`jps`命令获取。 5. 调用`VirtualMachine.loadAgent`,传入JavaAgent的路径以及任何必要的参数。 6. JavaAgent的`agentmain`方法会被调用,此时可以使用`Instrumentation`接口...

    java InvocationHandler

    - `method`参数表示被调用的具体方法,包含了方法名、返回类型以及参数类型等信息。 - `args`参数是一个可变参数,代表了传递给被调用方法的参数列表。 动态代理机制允许我们在不修改已有代码的基础上,扩展或增强...

    Mybatis讲义laodu

    这篇讲义主要介绍了MyBatis的基础知识、入门程序、核心配置文件详解、手动实现MyBatis框架、在Web中应用MyBatis、使用Javassist生成类、接口代理机制、小技巧、参数处理和查询语句专题,以及动态SQL和高级映射。...

    java高级应用简笔

    - **`getSimpleName()`**:获取类的简单名称(不包括包名)。 **3.3 获取字段信息** - **`getField(String name)`**:获取公共字段。 - **`getFields()`**:获取所有公共字段。 - **`getDeclaredField(String name...

    一个牛逼的 Java 字节码类库!(csdn)————程序.pdf

    在这个例子中,我们创建了一个名为`printName`的方法,该方法无参数,无返回值,打印出字段`name`的值。 6. **生成类并保存到磁盘**: 最后,通过调用`toClass`方法将`CtClass`对象转换为实际的Java类,并可选择将...

Global site tag (gtag.js) - Google Analytics