2012-03-02 9 views
1

私は、クライアントに代わって任意のクラスのインスタンスをロードするフレームワークを持ち、フィールド(最初はプライベートフィールド)を最初にアクセスするときにのみ初期化/ロードするようにします。遅延プライベートフィールドアクセスを傍受する

このようなプライベートフィールドへのアクセスを傍受し、値が返される前にフィールドに値を注入できますか?

私はjava.lang.reflect.Proxy/InvocationHandlerはメソッド呼び出しを傍受することしかできないと考えています。

私は、バイトコード操作ライブラリがこれを処理できると感じました。私はASM、Javassist、BCEL、cglibを見て回ったが、これを達成するための明確な指示は見つけられなかった。

答えて

0

これは確かにASMまたは同様のフレームワークを使用するバイトコード計測では可能ですが、バイトコード内部の作業とJVMの内部構造を理解する必要があります。

より簡単なアプローチは、AspectJを使用してオブジェクトのアスペクトを適用することです。このAOSD'07 paperには、Javaオブジェクトの透過的なクラスタリングについて、やや似た例があります。

+0

あなたの答えをありがとう。私はコンパイル時の依存関係を避けたいので、Imは面倒です。 – deephacks