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