code: public static <T> Constructor<T> resolveConstructor(Class<T> type, Class<?>[] parameterTypes, Object... arguments) {
  
      try {
        return getConstructor(type, parameterTypes);
      }
      catch (ConstructorNotFoundException cause) {
  
        Constructor<T> constructor = findConstructor(type, arguments);
  
        Assert.notNull(constructor, new ConstructorNotFoundException(String.format(
          "Failed to resolve constructor with signature [%1$s] on class type [%2$s]",
            getMethodSignature(getSimpleName(type), parameterTypes, Void.class), getName(type)), cause.getCause()));
  
        return constructor;
      }
    }
docs: Attempts to resolve the constructor from the given class type based on the constructor's exact signature,
  otherwise finds a constructor who's signature parameter types satisfy the array of Object arguments.
  
  @param <T> the generic class type from which to resolve the constructor.
  @param type the Class type from which to resolve the constructor.
  @param parameterTypes an array of Class types indicating the desired constructor's signature.
  @param arguments an array of Object arguments used to match the constructor's signature.
  @return a Constructor from the given class type who's signature either matches the parameter types
  or satisfies the array of arguments.
  @see #getConstructor(Class, Class[])
  @see #findConstructor(Class, Object...)
  @see java.lang.Class
  @see java.lang.reflect.Constructor