2017-03-06 6 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 
}