Great article references here, David. I want to go back to a post earlier on where you mention the idea of using injected singletons (I wrote blog post on that a few months ago http://jeffastorey.blogspot.com/2009/08/spring-managed-singletons-for.html
). It's actually an excellent point, not to be overlooked as an aside. Allowing a container (such as Spring) to manage your singletons is useful for a number of reasons:
1. Classes are not asking for objects with tons of references to getInstance, rather they are given a reference. An object should be concerned with its own behavior and not about how ti gets the objects.
2. It makes objects much more testable. Mocking singletons is very difficult and may discourage test writing.
3. If later on down the line you realize that something that was a singleton shouldn't have been, or vice versa, it's much easier to change that using injected singletons.
On a side node, using a practice like test driven development will really help discourage singletons. When you write the test first, it's unlikely you'll write the test around singletons.
That's my input for what it's worth.