spring - ProceedingJoinPoint से java.lang.reflect.Method प्राप्त करना?




java-ee aop (2)

प्रश्न छोटा और सरल है: क्या विधि ऑब्जेक्ट को apsectj ProceedingJoinPoint से प्राप्त करने का कोई तरीका है?

वर्तमान में मैं कर रहा हूँ

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

लेकिन मुझे नहीं लगता कि यह जाने का रास्ता है ...


आपकी विधि गलत नहीं है, लेकिन एक बेहतर है। आपको MethodSignature डालना MethodSignature

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

आपको सावधान रहना चाहिए क्योंकि Method method = signature.getMethod() इंटरफ़ेस की विधि वापस कर देगी, आपको इसे कार्यान्वयन कक्षा की विधि प्राप्त करने के लिए यह सुनिश्चित करना चाहिए:

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

(पकड़ने वाला कोड स्वैच्छिक खाली है, आप अपवाद को प्रबंधित करने के लिए बेहतर कोड जोड़ते हैं)

यदि आप इंटरफेस में नहीं हैं तो इसके साथ आप कार्यान्वयन करेंगे यदि आप विधि या पैरामीटर एनोटेशन तक पहुंचना चाहते हैं





spring-aop