2017-03-06 393 views
1

我知道方法參數很容易捕捉,它只是使用@ Advice.AllArguments。從建議的方法中獲取返回數據是否也很​​容易?我的目標不是修改方法,只是「拍攝出現的內容和出現的內容」並將其寫入文件。返回類型主要是來自javax的響應,但有時是基元。如何使用Byte Buddy和@Advice獲取返回數據?

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) { 


    } 
} 

回答

1

正如在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 
} 
相關問題