code: public Object getProperty(String key)
      {
          if (overrideProperties.containsKey(key)) {
              return overrideProperties.getProperty(key);
          }
          Configuration firstMatchingConfiguration = null;
          for (Configuration config : configList)
          {
              if (config.containsKey(key))
              {
                  firstMatchingConfiguration = config;
                  break;
              }
          }
  
          if (firstMatchingConfiguration != null)
          {
              return firstMatchingConfiguration.getProperty(key);
          }
          else
          {
              return null;
          }
      }
docs: Read property from underlying composite. It first checks if the property has been overridden
  by {@link #setOverrideProperty(String, Object)} and if so return the overriding value.
  Otherwise, it iterates through the list of sub configurations until it finds one that contains the
  property and return the value from that sub configuration. It returns null of the property does
  not exist.
  
  @param key key to use for mapping
  
  @return object associated with the given configuration key. null if it does not exist.