code: @Override
    @SuppressWarnings("unchecked")
    public <R> R newProxy(ClassLoader proxyClassLoader, T target, Class<?>[] proxyInterfaces,
        Iterable<MethodInterceptor<T>> methodInterceptors) {
  
      return (R) Proxy.newProxyInstance(proxyClassLoader, resolveInterfaces(target, proxyInterfaces),
        compose(methodInterceptors));
    }
docs: Constructs a new proxy for the given {@code target} {@link Object} implementing the given array of
  {@link Class interfaces} and using the {@link Iterable} collection of {@link MethodInterceptor} to intercept
  {@link Method} invocations on the proxy and handle the proxied invocation according to the interception.
  
  @param <R> desired {@link Class} type of the proxied {@link Object}.
  @param proxyClassLoader {@link ClassLoader} used to create the proxy {@link Class} type.
  @param target {@link Object} to proxy.
  @param proxyInterfaces array of {@link Class interfaces} for the constructed proxied {@link Object} to implement.
  @return a new JDK Dynamic Proxy instance.