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.
You can use Spring AOP, create point cut using @Around . Then you can use the below code to change the arguments of the method, based on the condition. int index = 0; Object[] modifiedArgs = proceedingJoinPoint.
This tutorial provided introduction to Spring AOP Around Advice, which is the most powerful advice. Around advice can prevent the actual method execution and return a response on methods behalf. It can also change the argument values to the target method.
After advice is used in Aspect-Oriented Programming to achieve the cross-cutting. It is an advice type which ensures that an advice runs after the method execution. We use @After annotation to implement the after advice.
We use @AfterThrowing annotation for this type of advice. Around Advice: This is the most important and powerful advice. This advice surrounds the join point method and we can also choose whether to execute the join point method or not.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With