回答:
ロギング、監査、セキュリティなどの機能グループとして懸念を考えます
これらの機能はほとんどのコードに存在しますが、実際には動物->犬のクラスには住んでいません-多くのクラスに住むべき機能です- 横断的な関心事です。
A ジョインポイントは、アスペクトのコードが実際に実行されるコード内の場所です。
ポイントカットは jointpointで動作しますどのようなコード言う方法です。
ウィービング -コンパイラ/システムが通常のコードを取得し、すべてのAOPコードを含めて正しいコードなどをトリガーする場合-これは追加のプリコンパイルステップと考えることができます。
簡単に理解できる例は次のとおりです。
実装とAOPフレームワークによって用語がわずかに異なることに注意してください。
各定義は前のものに基づいています。
アプリケーション全体のどこにでも(懸念)(横断的)迷惑をかけるもの。例:ロギングまたはセキュリティ
既存のコードの前、後、または両方(周囲)に自動的に追加されるコードの塊
Application code
|
|
|
|
\|/
|
JoinPoint ----------->("before" aspect, on the way in) // just before your intercepted application code
Pointcut start--------> public String myMethod(params ...)
//your application code
Pointcut finish--------> return (foo)
JoinPoint ----------->("after" aspect, on the way out) // just after your intercepted application code
|
\|/
|
|
|
Application code
アスペクトの一部が実行されるコード実行の場所。
アスペクトがポイントカットに「結合」するポイント。「前の」joinPointではパラメーターにアクセスでき、「後の」joinPointでは戻り値にアクセスできます。例外がスローされた場合、それを処理または再スローするには「try-catch-finally」が必要になる場合があります。
ポイントカットの周囲にアスペクトを追加するプロセス