I understand the benefit of DI from the Singleton point of view and the reduction of boiler-plate code. But I found this on wikipedia too:
Another benefit is that it offers configuration flexibility because alternative implementations of a given service can be used without recompiling code
When I use Spring or Guice it always makes a contract between 1 service and 1 implementation of it. Am I missing a feature or understanding the statement incorrectly?