2024年4月20日发(作者:)

打印Java方法参数

首先描述一下具体的需求就是,能不能不需要手动添加代码就能打印Java方法所有的

参数,这有些时候在我们调试代码的时候有很重要的帮助。

按照这个需求,我们可以想一下我们大体需要一下什么信息,方法的名称,方法参数

类型,方法参数的名字,方法参数的值。

如何实现不写代码就能够实现动态的打印这些信息呢,了解Java的这时候就都会想到

动态代理。有了动态代理我们就可以不用写代码了,但是为了区分哪些方法需要打印,哪

些方法不需要打印,我们这里还需要注解来辅助区分需要打印的方法。

如何获取需要打印的信息呢,这里我相信大家都会想到反射,但是反射这里有一个参

数是拿不到的,哪个参数呢,方法参数的名字是拿不到的。这里我们采用的是asm的方式

来获取方法参数的名字。

到这里功能已经描述清楚,需要用到的技术也描述清楚,接下来就是具体怎么实现了。

首先,我们设计了一个注解类如下:

import tType;

import ion;

import ionPolicy;

import ;

@Target(ElementType.

METHOD

)

@Retention(RetentionPolicy.

RUNTIME

)

public @interface MethodLog {

}

接下来就是我们设计的最后要打印的数据的一个简单的封装类,如下:

public class MethodInfo {

private int index;//参数的索引

private Object parameterType;//参数的类型

private String parameterName;//参数的名称

private Object parameterValue;//参数的值

public MethodInfo(){}

public MethodInfo(int index, Object parameterType, String parameterName,

Object parameterValue) {