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 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)}.
Override the same method in {