2016-05-02 4 views
0

私はByte Buddyを勉強しています。私はそれによってCGLibを置き換えようとしています。私は、フィールドへの書き込みを傍受するための実装方法があるかどうかを知りたい。私はフィールドの型がわからないので、割り当てられた値を変更したくありません。私はどんなアクセスでもfield written!を記録したいだけです。フィールドライタインターセプタ

例:私はこのクラスを持っている場合:

public class Ex { 
    public int i; 
    public String s; 
    public boolean b; 
} 

後、私はこれを行うとき:

Ex e = new Ex(); 
e.i=1; 
System.out.println("Value of i:" + i); 
e.s="hello"; 
System.out.println("Value of s:" + hello); 

それがなければならない出力:ヘルプページで

field written! 
Value of i: 1 
field writed! 
Value of s: hello 

カスタムの下でInstrumentation、例がありますが、明確ではありません。

答えて

0

いいえ、それはできません。これはあなたがcglibを使ってやっていたことですか? this is neither possible using Byte Buddy nor using cglibです。

フィールドが動的にディスパッチされないという問題があります。フィールドを含むクラスを再定義するのではなく、フィールドにアクセスするすべてのクラスを再定義して、不可能に近いものを再定義する必要があります。

+0

いいえ、CGLibで実装できませんでした。今日私はASMを読んでいましたが、今私が望むものは不可能であることを理解しています。 明日は私のライブラリをBBで書き直そうとして、何が起こるか見てみましょう。 –