static ConnectionRegistry create(URI uri, Configuration conf, User user) throws IOException {
    if (StringUtils.isBlank(uri.getScheme())) {
      LOG.warn("No scheme specified for {}, fallback to use old way", uri);
      return create(conf, user);
    }
    ConnectionRegistryURIFactory factory = FACTORIES.get(uri.getScheme().toLowerCase());
    if (factory == null) {
      LOG.warn("No factory registered for {}, fallback to use old way", uri);
      return create(conf, user);
    }
    return factory.create(uri, conf, user);
  }
Returns the connection registry implementation to use, for the given connection url
{@code uri}.
<p/>
We use {@link ServiceLoader} to load different implementations, and use the scheme of the given
{@code uri} to select. And if there is no protocol specified, or we can not find a
{@link ConnectionRegistryURIFactory} implementation for the given scheme, we will fallback to
use the old way to create the {@link ConnectionRegistry}. Notice that, if fallback happens, the
specified connection url {@code uri} will not take effect, we will load all the related
configurations from the given Configuration instance {@code conf}
hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionRegistryFactory.java