Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在我的方法修改了参数后,如何获取参数对象?_Java_Spring_Aop_Aspectj_Spring Aop - Fatal编程技术网

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

Java 在我的方法修改了参数后,如何获取参数对象?,java,spring,aop,aspectj,spring-aop,Java,Spring,Aop,Aspectj,Spring Aop,在方法做了一些修改之后,我尝试使用SpringAOP/AspectJ来访问我的参数 例如: public void changeValueOnFoo(Foo fooToModify) { fooToModify.changeValue("1"); } @Around("execution(* com.my.FooFunctions.changeValueOnFoo(..)") public void interceptFoo(Proceeding

在方法做了一些修改之后,我尝试使用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
只是保存一个指向参数原始状态的指针,所以这是不可能的

这样的事情可能吗?处理,然后回顾 该方法修改后的参数

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

或者getArgs呢 只需保持一个指向参数原始状态的指针,这样 不可能吗

这“简单地”使我们能够真正看到改变的状态

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