AspectJ MethodSignature为getParameterNames()返回null

Mic*_*l-7 6 java reflection aop aspectj

我有一个方面基于目标方法的细节进行各种计算,因此提前提取这些如下:

    @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();
}
Run Code Online (Sandbox Code Playgroud)

在提取的细节中,所有细节都反映了除了始终返回null的parameterNames之外的预期信息.我希望它按照下面的签名返回{accountDetails}.谁会知道我可能会遗漏什么,或者这是一个错误?

这是我正在反对的目标方法的签名:

Long createAccount(RequestAccountDetails accountDetails);
Run Code Online (Sandbox Code Playgroud)

Fre*_*red 1

对我有用:

@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();

    }
}
Run Code Online (Sandbox Code Playgroud)

输出:paramName: accountDetails

我已将 validateParams 的签名更改为: public Object validateParams(ProceedingJoinPoint joinPoint) throws Throwable因为createAccount()返回 Long。否则我会收到错误:applying to join point that doesnt return void: {0}