Aspectj перезаписывает аргумент метода

Я разрабатываю аспект, который проверяет аргументы методов setter и перезаписывает пустые строки с нулевым значением. Это мое состояние до сих пор:

@Before("execution(* de.foo.entity.*.set*(..)) && args(java.lang.String)")
public void check(final JoinPoint jp) {
    LOGGER.debug(jp.getSignature().toLongString());
    Object[] args = jp.getArgs();
    for (int i = 0; i < args.length; i++) {
        if (args[i] instanceof String && ((String) args[i]).isEmpty()) {
            args[i] = null;
        }
    }
}

К сожалению, перезаписываемый оператор args[i] = null; теперь работает! Кто-нибудь знает, как его переписать?

Приветствия,

Кевин

Ответы

Ответ 1

@Ralph у вас абсолютно все в порядке, разница в том, что с советом вокруг я могу передать аргументы за экзекьютив! Теперь это прекрасно!

@Around("execution(* de.foo.entity.*.set*(..)) && args(java.lang.String)")
public void checkAroundSetter(final ProceedingJoinPoint pjp)
    throws Throwable {
    LOGGER.debug(pjp.getSignature().toLongString());
    Object[] args = pjp.getArgs();
    for (int i = 0; i < args.length; i++) {
        if (args[i] instanceof String && ((String) args[i]).isEmpty()) {
            args[i] = null;
        }
    }
    pjp.proceed(args);
}

Эй, что ты думаешь о производительности?

Ответ 2

Я считаю, что вы должны использовать совет, а не совет.

Потому что вы можете использовать следующие аргументы:

proceed(newArgs);