In the configuration builder, it always calls getEffectiveDefaults, even when it is unnecessary. If you have not set the defaults, but have set both jsonProvider and mappingProvider, the call to getEffectiveDefaults is unnecessary, and only serves to introduce a dependency.
This is a problem when you are another library. You do not want to override the defaults, because the users of your library might be depending on those defaults. However, you have your own providers set, such that the defaults will not be used, ensuring safe operation.
In the configuration builder, it always calls getEffectiveDefaults, even when it is unnecessary. If you have not set the defaults, but have set both jsonProvider and mappingProvider, the call to getEffectiveDefaults is unnecessary, and only serves to introduce a dependency.
This is a problem when you are another library. You do not want to override the defaults, because the users of your library might be depending on those defaults. However, you have your own providers set, such that the defaults will not be used, ensuring safe operation.