Getting a return value or exception from AspectJ?

一个人想着一个人 提交于 2019-12-03 23:24:52

You can use after() returning and after() throwing advices as in beginning of the following document. If you're using @AspectJ syntax please refer to @AfterReturning and @AfterThrowing annotations (you can find samples here).

You can also get return value using after returing advice.

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;
          }

}

The defined aspect for getting return value:

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

    }

Using an around() advice, you can get the return value of the intercepted method call by using proceed(). You can even change the value returned by the method if you want to.

For instance, suppose you have a method m() inside class MyClass:

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

Suppose you have the following aspect in its own .aj file:

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;
   }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!