关于动力节点2020年最新Spring框架教程...中第60集课后作业见解

本文探讨了Spring AOP中后置通知和环绕通知如何影响目标方法的返回值。在后置通知中,直接通过new一个新的引用类型赋值给目标方法的返回值不会改变原始结果,因为这相当于创建了新的内存空间。然而,如果通过强转并修改返回值的属性,那么目标方法的结果将会受到影响。环绕通知则可以直接修改目标方法的对象,即使创建新对象,也会改变原结果。文章通过例子和代码解释了这一区别。
摘要由CSDN通过智能技术生成


链接: 原视频链接.

接口实现类

接口实现类的doOther方法

spring配置文件

请添加图片描述

引用类型Student

引用类型Student

maven测试类

请添加图片描述

切面(后置通知)直接将目标方法的返回值通过new 一个新的引用类型进行赋值改变

请添加图片描述
这里直接通过将新创建的对象赋值给res
运行结果
请添加图片描述

答案

当在切面类中使用的是直接创建一个对象来直接修改参数中res的值,最后目标方法执行后的结果并不会发生改变,原因是因为这里形参传入的是局部变量res,虽然res的值指向了目标方法的返回值,但是由于局部变量直接赋值给了一个新的引用,因此原来的引用并不会发生改变,相当于由多开辟了一个栈内存空间,而原来的引用仍然没有发生改变。

(后置通知)将目标方法的返回值结果修改他的属性值

由于res这里的引用指向就是目标方法返回值Student,因此进行强转然后修改Student的name属性

运行结果:请添加图片描述

答案

这里切面类中后置方法通过强转返回值res,并通过Student类的setName方法间接修改了原来引用的属性值,因此最后的结果中name发生变化,也就是会影响到目标方法的属性值

注意这里的后置通知和环绕通知有所不同,环绕通知类似于java中jdk提供proxy代理类中的invoke方法,环绕通知的切面方法的ProceedingJoinPoint对象执行proceed()方法返回的结果就直接是目标方法的对象,因此就算像本文所讲第一个结果一样创建一个新的对象指向引用,仍然会改变目标方法结果!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值