微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在我的方法修改参数后获取我的参数对象?

如何解决如何在我的方法修改参数后获取我的参数对象?

我正在尝试使用 Spring AOP/AspectJ 在方法对其进行一些修改后访问我的参数。

示例:

public void changeValueOnFoo(Foo fooToModify) {
    fooToModify.changeValue("1");
}

@Around("execution(* com.my.FooFunctions.changeValueOnFoo(..)")
public void interceptFoo(ProceedingJoinPoint jp) {
    Foo f = (Foo) jp.getArgs()[0];
    System.out.println(f.getValue()); // will print "1"
    jp.proceed(); 
    Foo modifiedf = jp.getArgs()[0];
    System.out.println(modifiedF.printValue()); // will print "2"?
}

这样的事情可能吗?继续,然后在方法修改参数后调用参数?还是 getArgs 只是持有一个指向参数原始状态的指针,所以这是不可能的?

解决方法

这样的事情可能吗?进行,然后回忆 方法修改后的参数?

是的,它会起作用,因为 getArgs() 保存对作为参数传递的对象的引用(即 Foo)。因此,对该对象的字段所做的任何更改对于外部都是可见的,因为它将使用纯 Java。

还是 getArgs 只需持有一个指向参数原始状态的指针,这样 不可能吗?

这“简单地”使得实际看到更改的状态成为可能。

但是请记住,这仅适用于对象类型,因为它们是通过引用调用的。这不适用于原始数据类型(例如 int、float、...)或不可变对象(例如 Integer、String 等)。 >

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。