Spring started out as an inversion of control container but has expanded in to many useful components:
- Dependency injection
- Spring MVC (for Web development)
- Authentication and authorization
- Transaction management
Dependency injection is at the heart of things and is a very useful addition to the Java language. In particular it helps to ensure that code is flexible, extensible and easier to test.