class Archaius2ObjectConfigurationResolver implements ObjectConfigurationResolver<OBJECT, CONFIG>, ConfigListener, Closeable {

    @Override
    public CONFIG resolve(OBJECT object) {
        if (object == null) {
            return defaultConfig;
        }

        String selectorValue = selectorFieldAccessor.apply(object);
        if (selectorValue == null) {
            return defaultConfig;
        }

        for (Map.Entry<String, Rule<CONFIG>> entry : configMap.entrySet()) {
            Rule<CONFIG> rule = entry.getValue();
            if (rule.getPattern().matcher(selectorValue).matches()) {
                return rule.getConfig();
            }
        }
        return defaultConfig;
    }

      Archaius2ObjectConfigurationResolver(Config configuration,
                                         Function<OBJECT, String> selectorFieldAccessor,
                                         Class<CONFIG> configType,
                                         CONFIG defaultConfig);
      Archaius2ObjectConfigurationResolver(Config configuration,
                                         Function<OBJECT, String> selectorFieldAccessor,
                                         Function<String, CONFIG> dynamicProxyFactory,
                                         CONFIG defaultConfig);

}