私は、次のポイントカット式を持っています:
@Pointcut("execution(* apply(..))")
お勧めの方法は、名前に変更されている場合さてapplyTo
、次にポイントカットはもはや正確でないとアドバイスは決して火。間違ったポイントカットは、アプリケーションの起動時や実行時例外を上げられないので、アドバイスの障害が見過ごされます。
私は春AOPのドキュメントに目を通しているが、ポイントカットが例外で失敗させるための方法を見つけることができませんでした。方法はありますか?
アントニオは、ここでエラーがない、100%の権利です。ポイントカットはちょうど言う:「あなたはこの説明に一致するジョインポイントを見つけてしまった場合、私のアスペクトアドバイスが適用されます」。
- ジョインポイントマッチングは春AOPでの実行時に行われます。だから、本質的に動的なものです。
- 同じことは、ロード時ウィービング(LTW)とAspectJのために真です。その後、動的ポイントカットとアスペクトコードと照合されているクラスローダがロード新しいクラスは、それらの中に織り込まれる可能性は常にあります。あなたはアスペクト織りで「完了」していることを知っていることはできませんので。するときは、警告やエラーを出すのでしょうか?
- あなたはコンパイル時織り(CTW)とAspectJのを使用している場合は、AspectJのコンパイラは警告を発行します
Xlint:adviceDidNotMatch
コンパイル時にアドバイスのポイントカットがまったくジョインポイントと一致しなかった場合。しかし、それはより多くの情報または警告以外になることはありませんでした、それについて考えるためにあなたが後であなたがCTWまたはLTWを使用している場合は、1つのアプリケーションに関係なく、内のアプリケーションや他のモジュールの多くに適用したいアスペクトモジュールをコンパイルした場合これらのモジュールを織るとき、マッチングジョインポイントは、後で発見されました。
これはエラーではありませんので、そうでなければ、一般的には、アスペクトライブラリまたはLTWを使用することができませんでした。側面の全体的なアイデアは、彼らがアプリケーションコードから独立しているということです。
また、あなたは99%の名前を変更する場合apply
にメソッドapplyTo
が、何らかの理由のために-意思や監督-単一保つapply
あなたの仮想的なエラーがいずれかが得られたことがないようにする方法を、ポイントカットは、まだ、一致します。あなたのエラーはどのように側面を知ることができウィーバー、構文が、セマンティックではないでしょうか?アントニオは、注意してリファクタリングを述べました。あなたがポイントカットを変えることができる。この特殊なケースではapply*
、それは両方に一致うapply
とapplyTo
もapplyMagic
多分あなたはしたくないいます。
それはまだあなたのコードベース全体でAOP関連の情報を散乱するため、コードの絡みを取り除くだけでなく、AOPの約束を果たすていないため、代わりにメソッド名の注釈を一致させるStultuskeのアイデアは、私が「AOPに貧乏人のアプローチ」と呼ぶものですだけでなく、散乱の。散乱は今だけの注釈の代わりに、インラインメソッドのコードに適用されます。最高の私は個人的にAOPのようなあなたは、あなたが特定の機能のような注釈をソースコードに宣言し、いくつかの理由の文書のためにその適用したい場合を除いて、すべてのアプリケーションコードでそれを見ていない場合@Transactional
。しかし、それは好みの問題ですが、私はおそらくまだアスペクトポイントカットの代わりに、アプリケーションに宣言を取得しようとするだろう。全体の一致パターンがポイントカットで扱うにはあまりにも複雑である場合にのみ、私の代わりに注釈を使用する場合があります。注釈および側面をリンクしても、「AOPのデザインパターン」のいくつかの種類がIMO、見当違いのため、過剰使用であることを作るの広範な実践。パターンは、その優れた用途がありますが、私が見るよりもはるかに少ないです。