web-dev-qa-db-ja.com

AspectJから戻り値または例外を取得していますか?

アドバイスされたメソッド呼び出しからシグネチャと引数を取得することはできますが、戻り値または例外を取得する方法がわかりません。私はそれが周りを使って何らかの方法で行うことができると思います。

15
Dallas

次のドキュメント の冒頭のように、after() returningおよびafter() throwingアドバイスを使用できます。 @AspectJ構文を使用している場合は、@AfterReturningおよび@AfterThrowingアノテーションを参照してください(サンプルを見つけることができます ここ )。

14
Constantiner

returing後アドバイスを使用して戻り値を取得することもできます。

package com.eos.poc.test;   

public class AOPDemo {
            public static void main(String[] args) {
                AOPDemo demo = new AOPDemo();
                String result= demo.append("Eclipse", " aspectJ");
           }
            public String append(String s1, String s2) {
                System.out.println("Executing append method..");
                return s1 + s2;
          }

}

戻り値を取得するために定義された側面:

public aspect DemoAspect {
    pointcut callDemoAspectPointCut():
        call(* com.eos.poc.test.AOPDemo.append(*,*));

    after() returning(Object r) :callDemoAspectPointCut(){
        System.out.println("Return value: "+r.toString()); // getting return value

    }
8
MAA

around()アドバイスを使用すると、proceed()を使用して、インターセプトされたメソッド呼び出しの戻り値を取得できます。必要に応じて、メソッドによって返される値を変更することもできます。

たとえば、クラスMyClass内にメソッドm()があるとします。

public class MyClass {
  int m() {
    return 2;
  }
}

独自の.ajファイルに次の側面があるとします。

public aspect mAspect {
   pointcut mexec() : execution(* m(..));

   int around() : mexec() {    
     // use proceed() to do the computation of the original method
     int original_return_value = proceed();

     // change the return value of m()
     return original_return_value * 100;
   }
}
6
Eduardo Bezerra