2017-10-12 18 views
2

を変更するために、インターセプトgetterメソッド:再定義クラス、ゲッターの戻り値

public class MyInterceptor { 
    @Advice.OnMethodExit 
    public static void intercept(@Advice.Return String value) { 
     // do my changes 
    } 
} 

これを再定義することが私のクラスである:

public class MyClass { 

    private String field; 

    public MyClass() { 
    } 

    public String getField() { 
     return field; 
    } 

    public void setField(String field) { 
     this.field = field; 
    } 
} 

私のJUnitテスト:

​​

しかし、私は私のテストを実行すると、MyInterceptor.intercept()メソッドが呼び出されていないと、この例外がスローされます。

java.lang.IllegalStateException: Cannot call super (or default) method for public java.lang.String package.MyClass.getField() 

私は間違っていますか?前もって感謝します。

答えて

0

Adviceはインターセプタとして使用されており、デコレータとは異なります。このようにして、Byte Buddyはデフォルトでスーパーメソッド呼び出しとしてこのメ​​ソッドを実装します。このパターンは、主にサブクラスを作成するときに役立ちます。あなたは装飾を作成することができます:

new ByteBuddy() 
    .redefine(MyClass.class) 
    .visit(Advice.to(MyInterceptor.class).on(named("getField"))) 
+0

はい、今それは動作します、ありがとうございます。 – cstripes

関連する問題