Help us understand the problem. What is going on with this article?

ざっくりとSpringで使うAOPの解釈をする

ログ出力で重宝しそうなAOPの概念を自分なりに解釈した

AOPとは

Aspect Oriented Programming(アスペクト指向プログラミング)の略。
オブジェクト指向みたいに、プログラミング手法の概念。

簡単な理解のための図

図にするとこんなイメージ

AOP1.png

共通処理を抜き出して、
プログラムのいろんなところで、横断的(Aspect)に呼び出す。
こうすることでログ出力みたいな、本来プログラムが持つべき本質的機能と予備的機能を分離できる

図1.AOPを適用する前のもの(左側)とAOP適用した場合(右側)

用語解説

用語 英単語 意味
アドバイス Advice 抽出した共通処理
ジョインポイント
(エントリポイント)
Join Point
(Entry Point)
アドバイスを入れる場所
(タイミング)
ポイントカット Pointcut アドバイスを適用する条件
アドバイサー Advisor アドバイスとポイントカットの両方を持つクラス
(アスペクトのモジュール化)
インターセプタ Interceptor 横取り・割り込み(インターセプト)して処理を行うもの。
アドバイスと同義(?)
クラスを作るときによく名前として使う模様
プロキシ Proxy フレームワークが生成したアドバイスを持つオブジェクト
ターゲット Target ジョインポイントを持つオブジェクト。
アドバイス(プロキシ)されるオブジェクト

AOP2.png
図2.アドバイスとジョイン(エントリ)ポイントとポイントカット

Spirngで使うときのpom.xml

下記を追加

pom.xml
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
                <artifactId>cglib</artifactId>
                <version>2.2</version>
        </dependency>
    </dependencies>

使いそうなコード(アノテーションなど)

まずアドバイスをもつクラスには@Aspectをつける

アドバイスつける側 説明
@Before メソッド実行前に呼び出す
@After メソッドの実行結果に関わらず、メソッド実行後に呼び出す
@Around メソッド実行の代わりに呼び出す(強い・便利)
@AfterReturning メソッドが正常終了した後に呼び出す(例外スロー時実行しない)
@AfterThrowing メソッド実行で例外がスローされた後に呼び出す

例えばexcutionのフォーマットは
execution(メソッド修飾子 メソッド戻り値 パッケージ名.クラス名.メソッド名(引数の型,引数の型) throws 例外)
なので、
@Before("execution(* com.example..*.*(..))")
みたいに使う
詳しくはここ

アドバイス側(制限) 説明
@target 指定のアノテーションを持つターゲットに制限
@args 指定のアノテーションを含む引数に制限
@within 指定のアノテーションをクラス宣言に含むターゲットに制限
@annotation 指定のアノテーションを含んでいるメソッドに制限
ポイントカット 説明
execution 実行
within 指定の型やパッケージで制限

参考サイト

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away