【问题标题】:How can I get my parameter object AFTER my method has modified the parameter?在我的方法修改了参数之后,如何获取我的参数对象?
【发布时间】:2021-03-16 14:35:51
【问题描述】:

在方法对其进行了一些修改后,我正在尝试使用 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 只是持有一个指向参数原始状态的指针,所以这是不可能的?

【问题讨论】:

    标签: java spring aop aspectj spring-aop


    【解决方案1】:

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

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

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

    这种“简单”使得实际看到变化的状态成为可能。

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

    【讨论】:

      猜你喜欢
      • 2016-12-08
      • 2013-07-31
      • 1970-01-01
      • 1970-01-01
      • 2022-12-08
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多