Tôi đã một khía cạnh mà không tính toán khác nhau dựa trên các chi tiết phương pháp của đối phương, và do đó chiết xuất những trả trước như sau:AspectJ MethodSignature trở về null cho getParameterNames()
@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();
}
Trong số chi tiết trích xuất, tất cả phản ánh mong đợi thông tin ngoại trừ parameterNames luôn trả về null. Tôi hy vọng nó sẽ trả lại {accountDetails} theo chữ ký bên dưới. Có ai biết những gì tôi có thể bị mất, hoặc là một lỗi này?
Dưới đây là chữ ký của phương pháp mục tiêu tôi đang làm việc chống lại:
Long createAccount(RequestAccountDetails accountDetails);
Từ giao diện của nó, không có cách nào đáng tin cậy (độc lập với các tùy chọn được đặt tại thời gian biên dịch) khi nhận tên thông số. Xem [Tôi có thể lấy tên tham số phương thức bằng cách sử dụng phản chiếu Java không?] (Http://stackoverflow.com/questions/2237803/can-i-obtain-method-parameter-name-using-java-reflection) và [Có cách nào không để lấy tên của các tham số phương thức trong Java?] (http://stackoverflow.com/questions/381502/is-there-a-way-to-obtain-names-of-method-parameters-in-java). Vì vậy, tôi nghi ngờ đây có thể là những gì đang chơi ở đây. –