我能够从建议的方法调用中获取签名和参数,但我无法弄清楚如何获取返回值或异常。我假设可以用某种方式使用它并继续进行。从AspectJ获取返回值或异常?
14
A
回答
13
您可以使用after() returning
和after() 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
}
相关问题
- 1. 抛出异常或返回值
- 2. 抛出异常或返回值
- 3. 从AJAX获取返回值
- 4. 从Proc获取返回值
- 5. 从setTimeout获取返回值
- 6. 使用异步库从异步函数获取返回值
- 7. 获取日期差异的返回值?
- 8. 异常使用的错误使用 - 从捕获返回值
- 9. 从proc返回一个位值? NullReference异常被捕获?
- 10. @Around(AspectJ)中没有捕获的异常
- 11. 返回异常
- 12. 获取返回值
- 13. 获取返回值
- 14. 获取savedInstanceState值,NullPointerException异常
- 15. 获取节点值异常
- 16. 从异步回调中获取值
- 17. 如何从nodejs中的异步函数获取返回值?
- 18. 如何从Node.js中的异步函数获取返回值?
- 19. 返回null或抛出异常一次
- 20. Python:抛出异常或返回无?
- 21. 抛出一个异常或返回null
- 22. 返回null或抛出异常
- 23. 返回java.util.Optional或抛出(Checked/Unchecked)异常
- 24. 如果方法抛出异常,则返回值返回值
- 25. 从IronPython获取返回值到Python
- 26. Scrapy从管道获取返回值
- 27. 从返回的json获取价值
- 28. PHP获取返回的值从构造
- 29. 从sql请求获取返回值
- 30. 从JDBC MSSQL获取返回值