MethodSignature methodSignature = (MethodSignature) proceedingJoinPoint.getSignature();
Method method = methodSignature.getMethod();
Object target = proceedingJoinPoint.getTarget();
Object[] args = proceedingJoinPoint.getArgs();
Class<?> targetClass = AopProxyUtils.ultimateTargetClass(target);
Synchronized annotation = getAnnotation(targetClass, method);
Validate.notNull(annotation, "Could not find @Synchronized annotation!");
Lock lock = getLock(targetClass, method, args, annotation);
if (lock == null) {
logger.debug("No lock obtained for call [{}] on targetClass [{}] - proceeding without synchronization on " +