code: @SuppressWarnings("unchecked")
      public static <T extends Class> Map<Key<T>, ? extends T> associateInterfacesToImplementations(
              InitContext initContext, Collection<T> interfaces, Map<T, Specification<? extends T>> specsByInterface,
              boolean overridingMode) {
          Map<Key<T>, ? extends T> keyMap = new HashMap<>();
          for (T anInterface : interfaces) {
              keyMap.putAll(associateInterfaceToImplementations(anInterface, initContext.scannedTypesBySpecification()
                      .get(specsByInterface.get(anInterface)), overridingMode));
  
          }
          return keyMap;
      }
docs: Associates scanned interfaces to their implementations. It also handles qualified bindings in
  the case where there is multiple implementation for the same interface. <p> This is the
  "default mode" for binding in the business framework. </p>
  
  @param initContext      the context containing the implementations.
  @param interfaces       the interfaces to bind.
  @param specsByInterface the specifications used to scan implementations, indexed by
  interfaces.
  @param overridingMode   if true, only implementations that satisfy {@link
  #isOverridingImplementation()} are bound, if false only implementations
  that don't satisfy {@link #isOverridingImplementation()} are bound.
  @param <T>              supertype of all interfaces to bind.
  @return the map of interface/implementation to bind.
  @see BindingUtils#resolveBindingDefinitions(Class, Class, Class[])