code: public static <T> ConsumerBootstrap<T> from(ConsumerConfig<T> consumerConfig) {
          String bootstrap = consumerConfig.getBootstrap();
          ConsumerBootstrap consumerBootstrap;
          if (StringUtils.isNotEmpty(bootstrap)) {
              consumerBootstrap = ExtensionLoaderFactory.getExtensionLoader(ConsumerBootstrap.class)
                  .getExtension(bootstrap,
                      new Class[] { ConsumerConfig.class },
                      new Object[] { consumerConfig });
          } else {
              // default is same with protocol
              bootstrap = consumerConfig.getProtocol();
              ExtensionLoader extensionLoader = ExtensionLoaderFactory.getExtensionLoader(ConsumerBootstrap.class);
              ExtensionClass<ConsumerBootstrap> extensionClass = extensionLoader.getExtensionClass(bootstrap);
              if (extensionClass == null) {
                  // if not exist, use default consumer bootstrap
                  bootstrap = RpcConfigs.getStringValue(RpcOptions.DEFAULT_CONSUMER_BOOTSTRAP);
                  consumerConfig.setBootstrap(bootstrap);
                  consumerBootstrap = ExtensionLoaderFactory.getExtensionLoader(ConsumerBootstrap.class)
                      .getExtension(bootstrap, new Class[] { ConsumerConfig.class }, new Object[] { consumerConfig });
              } else {
                  consumerConfig.setBootstrap(bootstrap);
                  consumerBootstrap = extensionClass.getExtInstance(
                      new Class[] { ConsumerConfig.class }, new Object[] { consumerConfig });
              }
          }
          return (ConsumerBootstrap<T>) consumerBootstrap;
      }
docs: 引用一个服务
  
  @param consumerConfig 服务消费者配置
  @param <T>            接口类型
  @return 引用启动类