java—在我的方法修改了参数之后,如何获取参数对象?

rkue9o1l  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(380)

我正在尝试使用springaop/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 只需保持一个指向参数原始状态的指针,这样就不可能了?

mefy6pfw

mefy6pfw1#

这样的事情可能吗?处理,然后在参数被方法修改后调用它?
是的,会有用的,因为 getArgs() 保存对作为参数传递的对象的引用(即。, Foo ). 因此,对该对象的字段所做的任何更改都将对外部可见,因为它将使用纯java。
或者getargs只是持有一个指向参数原始状态的指针,所以这是不可能的?
这“简单地”使我们有可能看到改变后的状态。
但是请记住,这只适用于对象类型,因为它们是通过引用调用的。这不适用于基本数据类型(如int、float等)或不可变对象(如integer、string等)。

相关问题