AspectJ MethodSignature возвращает ноль для getParameterNames () - PullRequest
6 голосов
/ 14 января 2012

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

    @Around("execution(* com.xyz.service.AccountService.*(..))")
public void validateParams(ProceedingJoinPoint joinPoint) throws Throwable {
    final MethodSignature signature = (MethodSignature) joinPoint.getSignature();

    final String methodName = signature.getName();
    final String[] parameterNames = signature.getParameterNames();
    final Object[] arguments = joinPoint.getArgs();
    ...
    ...
    ...
    joinPoint.proceed();
}

Из извлеченных сведений все отражают ожидаемую информацию, кроме параметра parameterNames, который всегда возвращает ноль. Я ожидаю, что он вернет {accountDetails} согласно подписи ниже. Кто-нибудь знает, что мне не хватает, или это ошибка?

Вот подпись целевого метода, с которым я работаю:

Long createAccount(RequestAccountDetails accountDetails);

1 Ответ

1 голос
/ 13 марта 2012

у меня работает:

@Aspect
public class MyAspect {

    @Around("execution(* *(..)) && !within(MyAspect)")
    public Object validateParams(ProceedingJoinPoint joinPoint) throws Throwable {
        final MethodSignature signature = (MethodSignature) joinPoint.getSignature();

        final String[] parameterNames = signature.getParameterNames();
        for (String string : parameterNames) {
            System.out.println("paramName: " + string);
        }

        return joinPoint.proceed();

    }
}

вывод: paramName: accountDetails

Я изменил подпись validateParams на: public Object validateParams(ProceedingJoinPoint joinPoint) throws Throwable потому что createAccount() возвращает Long. В противном случае я получаю ошибку: applying to join point that doesnt return void: {0}

...