DOTCOM, Pardon me if I think this piece is a gross oversimplification, I've only been building software since 1972 and using Java (beta) since 1995.
It has been my experience that any programming technique can be overused and misused. Both singletons and dependency injection have their purposes and neither is a solution to all problems.
Singletons (I use enums to implement them) are an excellent way to expose final variables that you need to make available across an entire VM and methods that that need to be generally available across an entire VM. That is a narrowly constrained purpose.
Dependency injection is also useful, but badly overused and can, when misused, create a rat's nest of confusion. It is an Achilles heel for Spring.
Using Java well requires a knowledge of sound architectural constraints if one is to use object orientation without falling into its traps.