AOPに触れてみる

AOPとは?

「ログ」や「トランザクション」や「認証」などクラスの直接的な責務ではない、各クラスで共通して使われる処理を横断的関心事(Cross-Cutting Concerns)と呼びます。
AOP(アスペクト指向プログラミング) では、各クラスで共通して使われる処理を別のモジュールとして切り出す(関心事を分離する)手法です。

AOPの用語

Spring AOP で出てくる主要な用語まとめです。
(イマイチ定義が理解できていない。。。)

  横断的関心をモジュール化したもの。
  アドバイスとポイントカットのペア。

  • ジョインポイント (Joinpoint)

  アドバイスを挿入できるプログラム実行中のあるポイント(メソッド呼び出しの前後など)。

  プログラム中のポイントカット、ジョインポイントへ挿入されるコード。
  Intercepterと呼ばれることもある。

    • Around Advice

    ジョインポイントの前後で実行される。

    • Before Advice

    ジョインポイントの前に実行される。

    • After Advice

    ジョインポイントの後に実行される。2つの種類がある。

    • After returning Advice

    ジョインポイントでの処理が正常に終了した後に実行される。

    • Throws Advice

    ジョインポイントでの処理で例外が発生した場合に実行される。

  • ポイントカット (Pointcut)

  ジョインポイントの集合。例えば、正規表現を使ってジョインポイントを指定することも可能。

  • イントロダクション (Introduction)

  フィールドをAdviceされるクラスに追加すること。
  実行時にインタフェースを任意のオブジェクトに実装させることもできる。

  • ウィーブ (Weave)

  adviceされたオブジェクトを生成するためにアスペクトを組み合わせること。
  ウェーブには、静的ウェーブと動的ウェーブがある。

    • 静的ウェーブ

    コンパイル時にアスペクトを織り込むこと。(AspectJなど)

    • 動的ウェーブ

    プロキシを利用して、起動時にアスペクトを織り込むこと。(Spring)