Spring Framework: a Java/J2EE framework for lightweight application development.
Firstly, Spring provides a complete lightweight container that enables centralized, automated configuration and wiring of application objects. This container assembles complex systems from loosely-coupled components (POJOs) in a consistent and transparent manner, allowing for scalability and improved testability.
Secondly, it offers a common abstraction layer for transaction management that allows for plugable transaction managers and makes demarcation of transactions easy without having to struggle with low-level issues. In comparison to plain JTA or EJB CMT, Spring's transaction support is not tied to J2EE environments.
Thirdly, Spring has a JDBC abstraction layer that significantly simplifies error handling while reducing the amount of code necessary to be written. It also has an integrated exception hierarchy that ensures compliance with Spring's generic DAO exception.
Fourthly, Spring provides integration with Hibernate, JDO, and iBATIS SQL Maps, in regards to resource holders and transaction strategies. Spring's Hibernate support has lots of convenience features that address common issues associated with Hibernate integration.
Fifthly, Spring has fully integrated AOP functionality into its configuration management, granting the ability to enable AOP on any Spring-managed object, and adding declarative transaction management aspects. Amazingly, Spring also allows declarative transaction management without EJB or JTA, making it perfect for using single database in Tomcat, or another web container without JTA support.
Sixthly, Spring has a flexible and highly configurable web application framework built on its core functionality. This framework accommodates several view technologies such as JSP, Velocity, Tiles, iText, and POI. Additionally, it can combine Spring's middle-tier with a web tier based on any other web MVC framework such as Struts, WebWork, or Tapestry.
Lastly, all of Spring's functionality can be used in any J2EE server, and most of it in non-managed environments. With Spring, one can have reusable business and data access objects that are not limited to specific J2EE services. These objects can be easily reused across different J2EE environments or standalone applications.
Spring's architecture is a layered one, which ensures flexibility in the functionality it offers. Users can use JavaBeans configuration management independently of the MVC framework, or AOP support can incorporate understanding of the configuration framework, making it applicable immediately.
Version 2.5.5: N/A