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

Custom Instrumentationの下のヘルプ ページに例がありますが、明確ではありません。

4

1 に答える 1

0

いいえ、それはできません。これは cglib を使用して行っていたことですか? これは Byte Buddy を使用しても cglib を使用しても不可能だからです。

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

于 2016-05-03T10:22:08.667 に答える