Dependency injection, change of implementation without recompile-Collection of common programming errors
If the decision of which implementation to use for a given service is in configuration, you can change that decision purely in configuration with no code changes, as long as the alternative implementation you want to use already exists.
This is largely the case quite naturally with Spring, where this decision is usually in XML configuration files read at application startup.