Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Byte Buddy和@Advice捕获返回数据?_Java_Javaagents_Byte Buddy - Fatal编程技术网

Java 如何使用Byte Buddy和@Advice捕获返回数据?

Java 如何使用Byte Buddy和@Advice捕获返回数据?,java,javaagents,byte-buddy,Java,Javaagents,Byte Buddy,我知道方法参数很容易捕获,只需使用@Advice.AllArguments即可。从adviced方法捕获返回数据也很容易吗?我的目标根本不是修改方法,只是“拍下输入和输出的图片”并将其写入文件。返回类型主要是来自javax的响应,但有时是原语 public class MyAdviser { @Advice.OnMethodEnter public static void onEnter(@Advice.This Object obj, @Advice.Origin String me

我知道方法参数很容易捕获,只需使用@Advice.AllArguments即可。从adviced方法捕获返回数据也很容易吗?我的目标根本不是修改方法,只是“拍下输入和输出的图片”并将其写入文件。返回类型主要是来自javax的响应,但有时是原语

public class MyAdviser {

  @Advice.OnMethodEnter
  public static void onEnter(@Advice.This Object obj, @Advice.Origin String method,
        @Advice.AllArguments Object[] args) throws IOException {

    FileWriter fw = new FileWriter("AgentData.txt", true);
    BufferedWriter bw = new BufferedWriter(fw);
    PrintWriter out = new PrintWriter(bw);
    out.println(method);
    out.println("Arguments : " + Arrays.deepToString(args));
    out.println("---------------------------------------------");
    out.close();

    final Logger LOG = LoggerFactory.getLogger(obj.getClass());
    LOG.info("Method name : " + method + " Object  : " + obj + "   " + obj.getClass());
    LOG.info("Arguments : " + Arrays.deepToString(args));

  }

  @Advice.OnMethodExit
  public static void onExit(@Advice.Origin String method) {


  }
}

正如
Advice
类的javadoc中提到的:

@Advice.OnMethodExit
public static void onExit(@Advice.Origin String method,
                          @Advice.Return Object returned,
                          @Advice.Thrown Throwable thrown) {
  // thrown will be null if no exception was thrown, returned if it was
}