world starter log hello example ejemplo spring java-ee aop aspectj spring-aop

spring - starter - Obteniendo java.lang.reflect.Method de un ProceedingJoinPoint?



spring boot aop (2)

Debe tener cuidado porque Method method = signature.getMethod() devolverá el método de la interfaz, debe agregar esto para asegurarse de obtener el método de la clase de implementación:

if (method.getDeclaringClass().isInterface()) { try { method= jointPoint.getTarget().getClass().getDeclaredMethod(jointPoint.getSignature().getName(), method.getParameterTypes()); } catch (final SecurityException exception) { //... } catch (final NoSuchMethodException exception) { //... } }

(El código en la captura es voluntario vacío, es mejor agregar código para administrar la excepción)

Con esto tendrás la implementación si deseas acceder a las anotaciones de métodos o parámetros si esta no está en la interfaz

La pregunta es breve y simple: ¿hay alguna manera de obtener el objeto Método de un apsectj ProceedingJoinPoint?

Actualmente estoy haciendo

Class[] parameterTypes = new Class[joinPoint.getArgs().length]; Object[] args = joinPoint.getArgs(); for(int i=0; i<args.length; i++) { if(args[i] != null) { parameterTypes[i] = args[i].getClass(); } else { parameterTypes[i] = null; } } String methodName = joinPoint.getSignature().getName(); Method method = joinPoint.getSignature() .getDeclaringType().getMethod(methodName, parameterTypes);

pero no creo que este sea el camino a seguir ...


Tu método no está mal, pero hay uno mejor. Tienes que MethodSignature a MethodSignature

MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod();