Spring AOP change value of methods argument on around advice

Ashish Aggarwal picture Ashish Aggarwal · Sep 3, 2015 · Viewed 12k times · Source

Is it possible to change method argument value on basis of some check before executing using Spring AOP

My method

public String doSomething(final String someText, final boolean doTask) {
    // Some Content
    return "Some Text";
}

Advice method

public Object invoke(final MethodInvocation methodInvocation) throws Throwable {
    String methodName = methodInvocation.getMethod().getName();

    Object[] arguments = methodInvocation.getArguments();
    if (arguments.length >= 2) {
        if (arguments[0] instanceof String) {
            String content = (String) arguments[0];
            if(content.equalsIgnoreCase("A")) {
                // Set my second argument as false
            } else {
                // Set my second argument as true
            }
        }
    }
    return methodInvocation.proceed();
}

Please suggest me the way to set the method argument value as there is no setter options for the argument.

Answer

reto picture reto · Sep 3, 2015

Yes that's possible. You need a ProceedingJoinPoint and instead of:

methodInvocation.proceed();

you can then call proceed with the new arguments, for example:

methodInvocation.proceed(new Object[] {content, false});

see http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/aop.html#aop-ataspectj-advice-proceeding-with-the-call