20150724 spring勉強会資料
TRANSCRIPT
AOP~アスペクト指向プログラミング~
■目次
1.AOPとはなんぞや
2.AOPで何ができる?
3.AOPの実装しよう! 基礎知識編
4.AOPの実装しよう! Spring AOP編
5.AOPの実装しよう! より実践的なAOP編
1.AOPとはなんぞやAOP とは「Aspect Oriented Programming :アスペクト指向プログラミング」の略アスペクトとは「様相」「側面」「視点」という意味があり、プログラミングを別の視点や側面から考えていこうというもの。
簡単にいうと、オブジェクト指向プログラミングではカバーできない箇所を補うことを指す。
オブジェクト指向はときに、オブジェクト単位に処理を上手く分解することができず、複数のオブジェクトで同じ操作が散在してしまうことがある。(これを横断的関心事という)主な処理にロギング処理、トランザクション処理、例外処理などがある。
AOPは、横断的関心事をアスペクトというモジュールに分離・管理(=横断的関心事の分離)することで、オブジェクト指向単体よりも再利用性や保守性を向上させることができる。
2.AOPで何ができる?
AOPを導入するとどう違うのかをロギング処理を例にイメージ化。
【AOP導入前】 【AOP導入後】
2.AOPで何ができる?
結果、以下のような利点が生まれる。
ロギング処理などの実装処理をコード中に記述する必要がなくなる。⇒設定ファイルで呼び出す処理やタイミングなどを管理することができるようになるので、コードを直接触らなくてもよくなる。新しい処理の追加も可能。
プログラムの実装者がロギング処理の実装を意識しなくてよくなる。⇒AOPで設定しておけば、特定のメソッドを呼び出すだけで、ロギング処理も走るようになるので、実装することだけを考えればよくなる。
業務ロジック本来のコードとそれ以外のコードに分割されるので、再利用性や保守性が向上する。
3.AOPの実装しよう! 基礎知識編
以下の4つがAOPを実装する上で主に必要になる用語です。
Advice(アドバイス)
Joinpoint(ジョインポイント)
Pointcut(ポイントカット)
Aspect(アスペクト)
3.AOPの実装しよう! 基礎知識編
Advice(アドバイス)アスペクトとして分離した、具体的な処理のこと。ようはAOPで分離しよう!って言っていたロギング処理などの実装処理のこと。ちなみにAdvice をモジュール挿入することを「ウィービング(Weaving:織り込み)」と呼ぶ。「Interceptor(インタセプタ)」と言うこともある。
Advice の実行方法にはいくつかタイプがあります。以下に一般的なAdvice から抜粋して紹介します。
「Around Advice 」・・・Joinpointの前と後ろで実行される Advice
「Before Advice」・・・Joinpointの前に実行される Advice
「After Advice」・・・正常・例外を問わず、Joinpointが終了した後に実行される Advice
「Throw Advice」・・・ Joinpointで例外が発生した場合に実行される
「After Returning Advice」・・・ Joinpointが正常終了した後に実行される Advice
3.AOPの実装しよう! 基礎知識編
Joinpoint(ジョインポイント)実行時の処理フローにおいて、Adviceを割り込ませることが可能な場所のこと。具体的には、「メソッド呼び出し」や「例外の発生」などを定義できる。
3.AOPの実装しよう! 基礎知識編
Pointcut(ポイントカット)Joinpointのうち、Adviceを適用したいJoinpointを正規表現などを用いた条件を使用して絞り込むためのフィルタの役割を担う。例えば、Adviceを適用したいのは「add」ではじまるメソッドが実行された時だけだとすると、条件を「add*」として絞り込まれたaddXxxメソッドが実行された時だけにAdviceが実行されるようにします。
3.AOPの実装しよう! 基礎知識編
Aspect(アスペクト)横断的な関心事が持つ振る舞い(処理のこと)と、いつ振る舞いを適用するかをまとめたもの。つまり、AdviceとPointcutをまとめたものをAspect(アスペクト)といいます。
AOPの実装を要約すると、以下のようなイメージになる。
4.AOPの実装しよう! Spring AOP編
Spring によるWebアプリケーションスーパーサンプル第2版に付属している、サンプル 1-4 を参考。
AOPの基本的な実装方法を試してみる。
5.AOPの実装しよう! より実践的なAOP編
Spring によるWebアプリケーションスーパーサンプル第2版に付属している、サンプル 1-5 を参考。
ここでは、POJO(Plain Old Java Object) と aopスキーマを活用した設定ファイルを用いてAOPを実現している。
○参考文献
【Webサイト】・DI(依存性の注入)×AOP(アスペクト指向)の常識http://www.atmarkit.co.jp/ait/articles/0910/29/news111_2.html
・第5回:AOPとは何かhttp://thinkit.co.jp/free/compare/15/5/1.html
【本】・Spring によるWebアプリケーションスーパーサンプル第2版