2011-04-13 102 views

回答

13

您可以使用after() returningafter() throwing的建议,如the following document开头。如果您使用@AspectJ语法,请参阅@AfterReturning@AfterThrowing注释(可以找到示例here)。

5

使用around()建议,您可以使用proceed()来获取拦截方法调用的返回值。如果您愿意,甚至可以更改该方法返回的值。

举例来说,假设你有一个方法m()MyClass类:

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

您也可以返回值使用后回国建议。

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 

    }