首页 > 解决方案 > 如何从@Advice.OnMethodExit 中的 premain 方法中获取 arg?

问题描述

public static void premain(String arg, Instrumentation instrumentation) {
        System.out.println("Agent for time measure:" + arg);
}

我想通过下面的方法获取 arg,或者没有使用 arg。最好在 OnMethodExit 方法中获取 arg。

public class TimerAdvice3 {

    @Advice.OnMethodEnter
    static long enter(@Advice.Origin String method, @Advice.AllArguments Object[] args) throws Exception {
        HttpUriRequest httpUriRequest = (HttpUriRequest) args[1];
        System.out.println(httpUriRequest.toString());
        long start = System.currentTimeMillis();
        return start;
    }

    @Advice.OnMethodExit
    static void exit(@Advice.Origin String method, @Advice.Enter long start) throws Exception {
        long end = System.currentTimeMillis();
        System.out.println("拦截======》" + method + " took " + (end - start) + " milliseconds ");
    }

}

标签: javabyte-buddyjavaagents

解决方案


public static void premain(String arg, Instrumentation instrumentation) {
        System.out.println("Agent for time measure:" + arg);

        FileWriter fileWriter = null;
        try {
            fileWriter = new FileWriter("./premain-arg");
            fileWriter.append(arg);
            fileWriter.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fileWriter != null) {
                try {
                    fileWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

这是我的解决方案,但我认为它并不完美


推荐阅读