Java
spring
AOP

Spring AOPの概要

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を呼び出す前と呼び出した後

以上です。お疲れ様でしたー。

参考書籍

Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発