Spring @AfterReturning 总是返回null


在学习Spring Aop时,遇到一个问题,当 @Around(环绕通知)与 @AfterReturning(后置通知)共存

时,@AfterReturning 通过属性 returning = "var" 获取目标方法的返回值时结果总为null,如下:

接口代码:

package brave.domain; public interface Cat { void eat(); String run(); }

目标类代码:

@Component public class CatImpl implements Cat { public void eat() { System.out.println("eat"); } public String run() { System.out.println("run"); return "我是返回值"; } }

切面代码:

@Aspect @Component public class CatAdvice { @Around("execution(* brave.domain.*.*(..))") public void around(ProceedingJoinPoint pjp){ out.println("begin"); try { pjp.proceed(); } catch (Throwable throwable) { throwable.printStackTrace(); } out.println("end"); } @AfterReturning(pointcut = "execution(* brave.domain.*.*(..))", returning = "var") public void aferReturning(Object var){ //增强方法的入参名需与returning的值一致 out.println("afterReturning"); out.println(var); } }

 运行结果:

在目标类的 run()中,我们返回了字符串 “我是返回值”,但运行结果却一直是null,当将环绕通知

注释掉后,结果正确,如图:

 

为什么会出现这个问题?作为初学者的我也很懵逼,只是在不断地尝试中发现了它,我想将它分享出

来,避免大家也入坑。如有大牛知晓其中的原理,期待您的解惑,谢谢。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM