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,当将环绕通知
注释掉后,结果正确,如图:

为什么会出现这个问题?作为初学者的我也很懵逼,只是在不断地尝试中发现了它,我想将它分享出
来,避免大家也入坑。如有大牛知晓其中的原理,期待您的解惑,谢谢。
Spring @AfterReturning 总是返回null的更多相关文章
- spring配置jackson不返回null值
#json不返回null spring.jackson.default-property-inclusion=non_null
- spring jdbcTemplate query 返回值为null
spring jdbcTemplate query 返回值为null 今天使用以下方法从数据库中查询数据,返回列表 public List<BookBean> getBooks(){ St ...
- mybatis有结果返回null
解决:application.yml 中mybatis此项(解决驼峰及数据库字段有下划线问题) map-underscore-to-camel-case: true 问题: mybatis debug ...
- json_decode返回NULL
最近在调用某公司的API时,将对方返回的数据,使用PHP的json_decode函数解析,但是返回NULL,最终排查为对方传送来的json格式有误 打印$_REQUEST,数据结构大致如下: arra ...
- $.parseJson 在 firefox 下返回 null 的问题
最近调查一个浏览器兼容性问题,在 IE, chrome下都运行正常,但是在 firefox 下运行时: $.parseJson(xxx) 返回 null,所以导致了 无法正常运行,调查的结果是因为 返 ...
- Type.GetType()反射另外项目中的类时返回null的解决方法
项目1:ProjectA namespace ProjectA { public class paa { .... } } Type.GetType("paa")返回null Ty ...
- findViewById返回null
Q:findViewById返回null? A: 代码逻辑错误: 最终,发现错误竟然是在layout文件中把android:id写成了android:name. android:name=" ...
- Xamarin +vs2015 Android 开发GPS loaction 返回 null 小结
最近公司要开发android 所以研究了一下Xamarin to android 中个GPS 废话不多说,说重点. 想获取手机上的gps信息必不可少的就是要使用 LocationManager Lo ...
- c#泛型方法返回null的问题
c#的泛型方法实现和java实现有点不同,在java中,所有的泛型方法运行时类型必须是引用类型,所以和非泛型一样可以返回null. 但是c#中有点不同,可以同时是值类型和引用类型,而值类型不能赋值nu ...
随机推荐
- cookie session区别
先理解为什么出现cookie和session: 为了使得网站可以跟踪客户端与服务器之间的交互,保存和记忆每个用户的身份和信息,我们需要一种强有力的解决方案,这样就产生了会话控制. 会话控制思想就是 ...
- POJ - 1984 Navigation Nightmare 种类并查集
思路:记录每个点与其根结点的横向距离和纵向距离,当知道其父节点与根结点的关系,很容易推出当前节点与根结点的关系: 直接相加即可. int p = a[x].par; a[x].dx += a[p].d ...
- 试着简单易懂记录synchronized this object Class的区别,模拟ConcurrentHashMap
修饰静态方法默认获取当前class的锁,同步方法没有释放的锁,不影响class其他非同步方法的调用,也不影响不同锁的同步方法,更不影响使用class的其他属性. package thread.base ...
- 原生javascript 的MAP使用
var map = {}; // Map map = new HashMap();map[key] = value; // map.put(key, value);var value = map[ke ...
- (转载)SVM-基础(二)
支持向量机: Support Vector by pluskid, on 2010-09-10, in Machine Learning 52 comments 本文是"支持向量机 ...
- Phpstrom操作git
1.PHPstrom操作git[上传] 2.提交代码到仓库 2. 3.使用git bash上传代码仓库的代码到远程服务器 代开git bash进入到项目所在的目录,输入命令$ git push .上 ...
- [微信JSSDK] 解决SDK注入权限验证 安卓正常,IOS出现config fail
实测有效 解决微信游览器和企业微信游览器JSSDK注入权限验证 安卓正常,IOS出现config fail 一开始我们想到的是可能微信这边的Bug,但细想一下应该不是.因为可能涉及到了IOS的底层原理 ...
- AndFix
AndFix 是阿里巴巴开源的 Android 应用热修复工具,帮助 Anroid 开发者修复应用的线上问题.Andfix 是 "Android hot-fix" 的缩写.支持 A ...
- Linux 系统裁剪笔记 3
说到裁减Linux,无非是为了减小磁盘占用或者是为了某些特定场合的应用(如嵌入式系统).以RedHat 7.3为例,其最小安装仍然达到了300M,这不得不让人对一直号称小而全的Linux系统感到疑惑. ...
- Linux显示查看您拥有的仓库
Linux显示查看您拥有的仓库 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ yum repolist all repolist: 0