@Override
    public CompletableFuture<Void> closeOnJvmShutdown(Runnable whenClosing) {
        requireNonNull(whenClosing, "whenClosing");
        return ShutdownHooks.addClosingTask(this, whenClosing);
    }
A {@link ClientFactory} which combines all discovered {@link ClientFactory} implementations.

<h2>How are the {@link ClientFactory}s discovered?</h2>

<p>{@link DefaultClientFactory} looks up the {@link ClientFactoryProvider}s available in the current JVM
using Java SPI (Service Provider Interface). The {@link ClientFactoryProvider} implementations will create
the {@link ClientFactory} implementations.
core/src/main/java/com/linecorp/armeria/client/DefaultClientFactory.java