后置通知中修改目标方法的引用类型返回值是否会改变目标方法的结果
链接: 原视频链接.
接口实现类
spring配置文件
引用类型Student
maven测试类
切面(后置通知)直接将目标方法的返回值通过new 一个新的引用类型进行赋值改变
运行结果:
答案:
当在切面类中使用的是直接创建一个对象来直接修改参数中res的值,最后目标方法执行后的结果并不会发生改变,原因是因为这里形参传入的是局部变量res,虽然res的值指向了目标方法的返回值,但是由于局部变量直接赋值给了一个新的引用,因此原来的引用并不会发生改变,相当于由多开辟了一个栈内存空间,而原来的引用仍然没有发生改变。
(后置通知)将目标方法的返回值结果修改他的属性值
运行结果:
答案
这里切面类中后置方法通过强转返回值res,并通过Student类的setName方法间接修改了原来引用的属性值,因此最后的结果中name发生变化,也就是会影响到目标方法的属性值