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