code: private <T> T getProperty(String property, Function<String, T> transformer) {
      Assert.notNull(property, "property");
      String value = properties.getProperty(property);
      if (value == null)
        throw new ConfigurationException("missing property: " + property);
      return transformer.apply(value);
    }
docs: Reads an arbitrary property.
  
  @param property The property name.
  @param transformer A transformer function with which to transform the property value to its appropriate type.
  @param <T> The property type.
  @return The property value.
  @throws ConfigurationException if the property is not present