Obtenir la méthode java.lang.reflect.Met à partir d’un ProceedingJoinPoint?

La question est courte et simple: existe-t-il un moyen d’obtenir l’object Method à partir d’un apsectj ProceedingJoinPoint?

Actuellement je fais

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

mais je ne pense pas que ce soit la voie à suivre …

    Votre méthode n’est pas mauvaise, mais il y en a une meilleure. Vous devez lancer sur MethodSignature

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

    Vous devez faire attention car Method method = signature.getMethod() renverra la méthode de l’interface, vous devez append ceci pour être sûr d’obtenir la méthode de la classe d’implémentation:

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

    (Le code en prise est volontaire vide, il vaut mieux append du code pour gérer l’exception)

    Avec cela, vous aurez l’implémentation si vous voulez accéder aux annotations de méthode ou de paramètre si celle-ci n’est pas dans l’interface