静的初期化子は、AspectJのアスペクトのために呼び出されることが保証されていますか?

StackOverflow https://stackoverflow.com/questions/2228061

  •  19-09-2019
  •  | 
  •  

質問

これはとても優しくしてください、私の最初の質問です。 :-)私は、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クラスのようにロードされた側面はありますか?これは、クラスローダを介して行われていますか?私はそう推測しています - そして動作しているようです - しかし、私はこれらの線に沿って保証を探しています。

役に立ちましたか?

解決

AspectJのは、バイトコードの変更を使用して動作します。この変更は、コンパイル時に枯れ(「コンパイル時織り」、またはCTW)起こる、または負荷時(「ロード・タイム織り」、またはLTW)にすることができます。

あなたが確認したい場合は、私はあなたはそれが実際に生成されたものを見るためにjavapツール(またはそれのようなもの)を介したクラスファイルをあなたの例でCTWを実行し、合格するためにAspectJのコンパイラを使用することをお勧め。それはそれはあなたがそれがない何を考えている(またはされていない)やっていることをあなたに安心感を与える必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top