メソッド変数のaspectjポイントカット、それは可能ですか?
質問
私はしばらくの間AspectJを使用してきましたが、注釈を含むオブジェクトスコープフィールドでうまく機能します。ポイントカットで動作するメソッドスコープの変数に注釈を付けたい状況に遭遇しましたが、問題が発生しています。
これが私が使用しているポイントカットです。私の変数がオブジェクトのフィールドである場合、それは正常に動作しますが、メソッド(メソッド内で宣言された変数)にスコープを減らすと、それはもう機能せず、理由がわかりません。私に何ができるか教えてください、ありがとう。
after(final Trigger trigger): set(@Triggereable * *) && args(trigger)
{
System.out.println("trigger flush");
}
また、ここに私が働きたいものの例があります。そのシステム.out.println上記は、トリガーがインスタンス化されたときに発射する必要があります。
public void foo()
{
@Triggereable
private Trigger trigger = new Trigger();
}
解決
AspectJは現在、ローカル変数でポイントカットをサポートしていません(読む FAQエントリ).
私はそのような機能に関する最近の議論をすぐに追加したことを思い出すようですが、私はそれを見つけることができませんでした AspectJ問題トラッカー でも メーリングリストアーカイブ
他のヒント
あなたがそのような状況に来た場合、あなたはおそらく実際のクロスカットの懸念を適用する代わりに実装を変更しようとしています。基本的に、それはAOPとAspectJが使用されることになっているものではありません。
回避策として、関連する機能を別の方法に抽出してから、その方法にアスペクトを適用するか、またはその方法全体をそのローカル変数に置き換えることができます。
詳細は、特定の例では、特定の方法の範囲内でコンストラクターの実行にポイントカットを適用できるため、ローカル変数にバインドせずに実質的に同じことを行うことができます。
所属していません StackOverflow