archaius-core/src/main/java/com/netflix/config/ConcurrentMapConfiguration.java
@Override
    public void setProperty(String key, Object value) throws ValidationException
    {
        if (value == null) {
            throw new NullPointerException("Value for property " + key + " is null");
        }
        fireEvent(EVENT_SET_PROPERTY, key, value, true);
        setPropertyImpl(key, value);
        fireEvent(EVENT_SET_PROPERTY, key, value, false);
    }
@Override
    public void setProperty(String key, Object value) throws ValidationException
    {
        if (value == null) {
            throw new NullPointerException("Value for property " + key + " is null");
        }
        fireEvent(EVENT_SET_PROPERTY, key, value, true);
        setPropertyImpl(key, value);
        fireEvent(EVENT_SET_PROPERTY, key, value, false);
    }
Override the same method in {@link AbstractConfiguration} to simplify the logic
to avoid multiple events being generated. It calls {@link #clearPropertyDirect(String)}
followed by logic to add the property including calling {@link #addPropertyDirect(String, Object)}.