AOPについて、軽く見ていきましょう!
AOPは、ソースを書き直すことなく、メソッドの前後に新しい処理を織り込む機能です。
これはJavaの実行ファイルを読み込むときに、指定の位置のバイナリを書き換えるのです。
まあ、実際に実装のイメージを見てみたほうが早いと思うので、いってみましょう
【イメージ】
例えばメソッドaaaがあったとすると、以下のような感じです。
int aaa(String msg){
・・・
}
織り込む処理のイメージ:
public Object invoke(MethodInvocation invocation) throws Throwable { //メソッド名を取得("aaa"が渡ってくる) String name = invocation.getMethod().getName();
//メソッド実行 int ret = (Integer)invocation.proceed();
return ret; }
【説明】
なんとなく分かるでしょうか?
AOPの機能がAメソッドを乗っ取って、Aメソッドが呼び出されるところで代わりに
invokeというメソッドが呼び出されます。
invokeは、proceed()というメソッドを使用して実際の処理(メソッドaaa())を実行します。
この前後でtry~catchしたり、ログの処理を書いたりします。
MethodInvocation について
このクラスは、メソッド自体を表すクラスで、この中にメソッド名やメソッドの引数などを保持しています。
ですので、メソッド名が"get"から始まっているときに何かを処理する、などいろいろ幅広くできます!
あくまで、上記はひとつの例です。
こんな感じで、メソッドやクラスの織り込みを行います。
参考:
・DIxAOPの機能について
・Springのトランザクション機能について
・トランザクションのコードを書かないようにするには?(宣言的トランザクション)