Вставить значение параметра метода во время выполнения в аспект - PullRequest
0 голосов
/ 28 мая 2020

Я определил аспект, который будет обертывать мои @RestControllers:

@Aspect
@Order(1)
public class ControllerAspect {

    @Around("controllerinvocation()")
    public Object doThings(ProceeedingJoinpoint pj) throws Throwable{
          //before I would set MyObject values
         return pj.proceed();
    }
}

Я хочу сделать так, чтобы, если мои контроллеры выставляют экземпляр MyObject в качестве параметра, я заполняю его значением:

public void controllerMethod(MyObject obj, /* any other parameter */) { //of course obj is null now, how can I fill it?

Как это сделать? Я точно знаю, что это возможно, поскольку Spring уже делает это, если я добавлю, например, HttpServletRequest в качестве параметра ... нужно ли мне также указать аннотацию? Или я могу сделать это только на основе типа параметра? Какой способ наиболее эффективен?

1 Ответ

1 голос
/ 28 мая 2020

Если вы собираетесь использовать решение на основе aop, то что-то вроде этого выполнит задачу

@Around( value = "execution( // your execution )" )
public Object doThings( ProceedingJoinPoint joinPoint ) throws Throwable
{
    Object[] args = joinPoint.getArgs();

    for( Object arg : args )
    {
        if( arg instanceof MyObject )
        {
            MyObject sampleMyObj = new MyObject (); // Create the dummy value
            return joinPoint.proceed( new Object[] { sampleMyObj, // other args if any } ); // Pass this to the method
        }
    }

    return joinPoint.proceed();
}
...