Springframework 学習その2 AOPについてです。
AOPの概要
AOPとは
AOPとはアスペクト志向プログラミング(Aspect Oriented Programming)のこと。
Aspectとは、「様子」や、「面」などを意味します。
AOPで何ができるのか
ざっくり言うと、ビジネスロジックに直結しない約束事を共通的な処理として定義することができる。
例えば、「APIの処理開始直後と終了直前にログを出力する」とか。
なぜAOPを使うのか
ある程度の規模のシステムになってくると、ログ出力やトランザクションは、
コーディング規約になったりするなど必須なものになることがあります。
しかし、規約だからと言って毎回同様の実装をしていては、似たような処理が分散するため仕様変更の際に修正漏れがあるかもしれないですし、そもそも書き忘れてたとかあったりしたら困っちゃいます。
そんな時にAOPを利用して、Controllerのメソッドが呼び出される直前にログ出力するなど、
共通処理を呼び出すようにしたりすることで、ログ出力はログ出力用クラス、
ControllerはControllerの役割を明確にすることに繋がります(凝集度が高くなる)。
こんな感じのことを「横断的関心事の分離」とか言います。
AOPのコンセプト
コンセプト | 内容 |
---|---|
Aspect | 関心事を示すモジュールそのもの ログ出力とか、例外ハンドルとか |
Join Point | 関心事を実行するポイント Controller開始直後とか、例外スロー時とか |
Advice | Join Pointで実行される処理 Around、Before、Afterなど |
Pointcut | Join Pointのグループ |
Weaving | アプリケーションコードの適切なポイントにAspectを入れ込む処理 |
Target | AOP処理によって処理フローが変更されたオブジェクト |
Springで利用可能なAdvice
AOP | タイミング |
---|---|
Before | Targetを呼び出す前 |
After Returning | Targetの処理が正常終了し、呼び出し元に制御を返却する時 |
After Throwing | Targetの処理で例外が発生し、呼び出し元に例外をthrowする時 |
After | After Returningと、After Throwing 両方のタイミング |
Around | Beforeと、After両方のタイミング つまり、Targetを呼び出す前と呼び出した後 |
以上です。お疲れ様でしたー。