docs: public static MethodInvoker getMethodInvokerByAnnotation(
  			final Class<? extends Annotation> annotationType, final Object target) {
  		Assert.notNull(target, "Target must not be null");
  		Assert.notNull(annotationType, "AnnotationType must not be null");
  		Assert.isTrue(ObjectUtils.containsElement(
  				annotationType.getAnnotation(Target.class).value(), ElementType.METHOD),
  				"Annotation [" + annotationType + "] is not a Method-level annotation.");
  		final Class<?> targetClass = (target instanceof Advised)
  				? ((Advised) target).getTargetSource().getTargetClass()
  				: target.getClass();
  		if (targetClass == null) {
  			// Proxy with no target cannot have annotations
  			return null;
  		}
  		final AtomicReference<Method> annotatedMethod = new AtomicReference<Method>();
  		ReflectionUtils.doWithMethods(targetClass, new ReflectionUtils.MethodCallback() {
  			public void doWith(Method method)
  					throws IllegalArgumentException, IllegalAccessException {
  				Annotation annotation = AnnotationUtils.findAnnotation(method,
  						annotationType);
  				if (annotation != null) {
  					Assert.isNull(annotatedMethod.get(),
  							"found more than one method on target class ["
  									+ targetClass.getSimpleName()
  									+ "] with the annotation type ["
  									+ annotationType.getSimpleName() + "].");
  					annotatedMethod.set(method);
  				}
  			}
  		});
  		Method method = annotatedMethod.get();
  		if (method == null) {
  			return null;
  		}
  		else {
  			return new SimpleMethodInvoker(target, annotatedMethod.get());
  		}
  	}