AOPとは? | Java Springの逆引きメモ

Java Springの逆引きメモ

JavaのSpring frameworkのメモを書いていきます!
初心者の勉強ノートなので間違いがあるかもしれませんが、何かヒントになることがあれば幸いです。


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のトランザクション機能について
・トランザクションのコードを書かないようにするには?(宣言的トランザクション)