アスペクト指向プログラミング
2021-11-14 (日) 12:03:00
アスペクト指向プログラミングについて †
- AOPと略す。
- オブジェクト指向に不足していたオブジェクト間の依存関係を定義する技術。
- 「横断要素」と呼ばれるオブジェクトをまたがった処理を、オブジェクトに分散させるのではなく単一のモジュール「アスペクト」にまとめて記述しておき、後からコンパイラなどのツールを用いてプログラムを結合しようという開発手法。
- Advice(アドバイス):外部から処理を挿入すること。
- Point Cut(ポイントカット):処理を挿入する場所のこと。
JAVAにおけるアスペクト指向プログラミング †
Spring AOP †
- MethodBeforeAdvice
- org.springframework.aop.MethodBeforeAdvice
- Point Cut:メソッドが呼び出される直前
- メソッド:before
- AfterReturningAdvice
- org.springframework.aop.AfterReturningAdvice
- Point Cut:メソッドが実行終了後
- メソッド:afterReturning
- ProxyFactoryBean
- org.springframework.aop.framework.ProxyFactoryBean
- クラスのインスタンスにAdviceを組み込むためのもの
- setTarget()
- setInterceptorNames()
- AOPの利用方法 †
- Bean定義ファイルを使った利用
- Bean設定クラスを使った利用
AspectJ †
- Spring AOPより高度なAOP処理を行うことができる。
- コンパイル後のクラスファイル(.class)に処理を挿入する。
- @Aspectアノテーション
- org.aspectj.lang.annotation.Aspect;
- @Beforeアノテーション
- org.aspectj.lang.annotation.Before;
- Point Cut:メソッドが呼び出される直前
- @Afterアノテーション
- org.aspectj.lang.annotation.After;
- Point Cut:メソッドが実行終了後
- execution
- @Before,@Afterの引数で指定する。
- Adviceの挿入対象範囲とするメソッドを指定するためののも。
- ワイルドカード("*"、"..")で指定することができる。
- @EnableAspectJAutoProxy
- AspectJによるAOP機能を有効にする。
- このアノテーションを削除すれば、AOP機能が無効になる。
横断的関心事(CCC) †
- ロギング
- キャッシング
- セキュリティ
- トランザクション
- モニタリング
- 例外ハンドリング