code: public final T newService(final String type, final Properties props) {
          Collection<T> typeBasedServices = loadTypeBasedServices(type);
          if (typeBasedServices.isEmpty()) {
              throw new ShardingConfigurationException("Invalid `%s` SPI type `%s`.", classType.getName(), type);
          }
          T result = typeBasedServices.iterator().next();
          result.setProperties(props);
          return result;
      }
docs: Create new instance for type based SPI.
  
  @param type SPI type
  @param props SPI properties
  @return SPI instance