1

これが私の最初の質問ですので、優しくしてください。:-)AspectJがJavaクラスの静的初期化子にポイントカットを作成できることを私は知っています。ただし、問題は、以下のようなアスペクトの静的初期化子が1回だけ呼び出されることが保証されているかどうかです

@Aspect
public class MyAspect {
  private static Map configuration;
  static {
    // Some initialization stuff
    configuration = Config.getConfiguration();
  }
  ... use the "configuration" map in pointcuts and advices
}

つまり、Javaクラスがロードされるようにアスペクトがロードされますか?これはClassLoaderを介して行われますか?私はそうだと思います-そしてそれはうまくいくようです-しかし私はそれらの線に沿って保証を探しています。

4

1 に答える 1

1

AspectJはバイトコード変更を使用して動作します。この変更は、コンパイル時(「コンパイル時ウィービング」、またはCTW)、またはロード時(「ロード時ウィービング」、またはLTW)に発生する可能性があります。

確認したい場合は、aspectjコンパイラを使用してサンプルでCTWを実行し、結果のクラスファイルをjavapツール(またはそのようなもの)に渡して、実際に何が生成されたかを確認することをお勧めします。それはあなたにそれがあなたが思っていることをしている(またはしていない)という安心感を与えるはずです。

于 2010-02-09T09:53:07.487 に答える