code: public static Class<?> findAnnotationDeclaringClassForTypes(List<Class<? extends Annotation>> annotationTypes, Class<?> clazz) {
  		Assert.notEmpty(annotationTypes, "The list of annotation types must not be empty");
  		if (clazz == null || clazz.equals(Object.class)) {
  			return null;
  		}
  		for (Class<? extends Annotation> annotationType : annotationTypes) {
  			if (isAnnotationDeclaredLocally(annotationType, clazz)) {
  				return clazz;
  			}
  		}
  		return findAnnotationDeclaringClassForTypes(annotationTypes, clazz.getSuperclass());
  	}
docs: Find the first {@link Class} in the inheritance hierarchy of the specified
  {@code clazz} (including the specified {@code clazz} itself) which declares
  at least one of the specified {@code annotationTypes}, or {@code null} if
  none of the specified annotation types could be found.
  <p>If the supplied {@code clazz} is {@code null}, {@code null} will be
  returned.
  <p>If the supplied {@code clazz} is an interface, only the interface itself
  will be checked; the inheritance hierarchy for interfaces will not be traversed.
  <p>The standard {@link Class} API does not provide a mechanism for determining
  which class in an inheritance hierarchy actually declares one of several
  candidate {@linkplain Annotation annotations}, so we need to handle this
  explicitly.
  @param annotationTypes the list of Class objects corresponding to the
  annotation types
  @param clazz the Class object corresponding to the class on which to check
  for the annotations, or {@code null}
  @return the first {@link Class} in the inheritance hierarchy of the specified
  {@code clazz} which declares an annotation of at least one of the specified
  {@code annotationTypes}, or {@code null} if not found
  @since 3.2.2
  @see Class#isAnnotationPresent(Class)
  @see Class#getDeclaredAnnotations()
  @see #findAnnotationDeclaringClass(Class, Class)
  @see #isAnnotationDeclaredLocally(Class, Class)