public static <T> ProviderBootstrap<T> from(ProviderConfig<T> providerConfig) {
        String bootstrap = providerConfig.getBootstrap();
        if (StringUtils.isEmpty(bootstrap)) {
            // Use default provider bootstrap
            bootstrap = RpcConfigs.getStringValue(RpcOptions.DEFAULT_PROVIDER_BOOTSTRAP);
            providerConfig.setBootstrap(bootstrap);
        }
        ProviderBootstrap providerBootstrap = ExtensionLoaderFactory.getExtensionLoader(ProviderBootstrap.class)
            .getExtension(bootstrap, new Class[] { ProviderConfig.class }, new Object[] { providerConfig });
        return (ProviderBootstrap<T>) providerBootstrap;
    }
public static < T > ProviderBootstrap < T > from ( ProviderConfig < T > providerConfig ) { String bootstrap = providerConfig . getBootstrap ( ) ; if ( StringUtils . isEmpty ( bootstrap ) ) { bootstrap = RpcConfigs . getStringValue ( RpcOptions . DEFAULT_PROVIDER_BOOTSTRAP ) ; providerConfig . setBootstrap ( bootstrap ) ; } ProviderBootstrap providerBootstrap = ExtensionLoaderFactory . getExtensionLoader ( ProviderBootstrap . class ) . getExtension ( bootstrap , new Class [ ] { ProviderConfig . class } , new Object [ ] { providerConfig } ) ; return ( ProviderBootstrap < T > ) providerBootstrap ; }
发布一个服务

@param providerConfig 服务发布者配置
@param <T>            接口类型
@return 发布启动类