code: @Nullable
    public static <T> T getFirstSPIImplementation (@Nonnull final Class <T> aSPIClass,
                                                   @Nonnull final ClassLoader aClassLoader,
                                                   @Nullable final Logger aLogger)
    {
      final Logger aRealLogger = aLogger != null ? aLogger : LOGGER;
      final ICommonsList <T> aAll = getAllSPIImplementations (aSPIClass, aClassLoader, aRealLogger);
      if (aAll.isEmpty ())
      {
        // No SPI implementation found
        return null;
      }
  
      if (aAll.size () > 1)
      {
        // More than one implementation found
        if (aRealLogger.isWarnEnabled ())
          aRealLogger.warn ("Requested only one SPI implementation of " +
                            aSPIClass +
                            " but found " +
                            aAll.size () +
                            " - using the first one. Details: " +
                            aAll);
      }
      return aAll.getFirst ();
    }
docs: Uses the {@link ServiceLoader} to load all SPI implementations of the
  passed class and return only the first instance.
  
  @param <T>
  The implementation type to be loaded
  @param aSPIClass
  The SPI interface class. May not be <code>null</code>.
  @param aClassLoader
  The class loader to use for the SPI loader. May not be
  <code>null</code>.
  @param aLogger
  An optional logger to use. May be <code>null</code>.
  @return A collection of all currently available plugins. Never
  <code>null</code>.