posted 13 years ago
Those are pretty broad questions.
I use a few parts of Spring *quite* heavily, others only occasionally, and some not at all. Which parts those are depend a lot on the project, but some things I almost always use: the DI/IoC part is incredibly helpful no matter what I'm doing--I use it all the time. The transaction management is another part that gets used almost all the time. The AOP *can* be very useful, but unless you're well-versed in the best ways to use AOP it's easy to abuse it.
There are several other DI/IoC frameworks, some of which are arguably better for some uses (Guice stands out in my mind, although because of my heavy Spring usage it's not something I can use all the time). Spring has the benefit of being wildly popular.
Downsides? I can't think of too many, although as with anything, there's a learning curve (which is worth it, in my opinion). If you're not adept at reading stack traces some errors can be a little mysterious. I'm wary of heavy use of name-based autowiring (although I do it all the time), as on occasion it can lead to puzzling errors.