I spent a lot of time learning Spring in the day and I felt it filled a gap in Java in a way Guava really doesn't. I call it "configuration driven development". I was writing a large series of report generators in Python and all of them had the structure of "a little script that assembles a few objects in a library together to do a task". In the case of Java that "script" is naturally a Java class that needs to be compiled, goes through the build process, involves artifact management, etc. It's very nice that Spring provides a "general configuration file" that lets you patch together a few objects without having to compile anything.
Used to with xml files, now its attribute driven, just another way to double the complexity again :)
The problem is: how exact do you configure those things? How do I find which nested incantation, and in what format, is applicable to something?