Spring Frameworkdにおいて、
DI(
Dependency Injection、依存性注入)と並び重要な根幹技術となっているのが「
AOP」というものです。
AOPは、「
Aspect Oriented Programming(アスペクト指向プログラミング)」の略です。
アスペクトというのは、一般に「
横断的関心事」と呼ばれるものです。
オブジェクト指向では、プログラムは「クラス」を単位として作成されます。それぞれのクラスごとに、そのクラスに必要な機能をメソッドとして実装してくわけですね。この手法は、考え方としてはよくできていますが、逆に「クラスごとに完結している」ということが面倒になってしまうこともあります。
例えば、プログラムの開発中、動作状況をチェックするために、あちこちに
System.out.println文を書いて値を出力させている、なんて人はいませんか? 誰しもよくやる方法ですね。これ、考えてみるとものすごく面倒くさいやり方です。多数のクラスがあったら、それぞれのクラスのそれぞれのメソッドに
printlnを書いていかないといけません。更に、そうやってプログラムが完成したら、すべての
printlnを削除しないといけないのです。
こういう「多数のクラスにわたって共通して必要となる処理」が、横断的関心事です。もしも、さまざまなクラスの中にあるメソッドに、
println文を自動的に挿入できる機能があったら、これはかなり便利じゃありませんか? そして必要がなくなったらすべて自動的に削除できるとしたら? これこそが、
AOPの考え方なのです。
DIが「依存性(値)の注入」なら、
AOPは「処理の注入」といってよいでしょう。外部から、クラス内の特定のところに、あらかじめ用意しておいた処理を挿入したり取り除いたりする。これが
AOPで実現されることです。
■pom.xmlの準備
まずは、プロジェクトにAOP関連のライブラリを追加しましょう。
pom.xmlを開き、
<dependencies>タグ内に下のリスト欄にある内容を追加して下さい。
ここで追加するのは、
Spring AOPのライブラリです。
グループIDに
org.springframework、
アーティファクトIDに
spring-aopを指定します。なおバージョンは、Spring Framework 4.1.7での利用に合わせたものを指定してあります。Spring Frameworkのバージョンが異なる場合は、それにあわせてバージョンを調整ください。