The Spring Framework
for short) is an open source application
framework for the Java platform. The first version was written by Rod Johnson,
who first released it with the publication of his book Expert One-on-One J2EE
Design and Development (Wrox Press, October 2002). A port is available for the
The framework was first released under the Apache 2.0 license in June 2003.
The first milestone release, 1.0, was released in March 2004, with further
milestone releases in September 2004 and March 2005.
Although the Spring Framework does not enforce any specific programming
model, it has become popular in the Java community as an alternative,
replacement, or even addition to the Enterprise JavaBean model. By design, the
framework offers a lot of freedom to Java developers yet provides well
documented and easy-to-use solutions for common practices in the industry.
While the core features of the Spring Framework are usable in any Java
application, there are many extensions and improvements for building web-based
applications on top of the Java Enterprise platform. Spring has gained a lot of
popularity because of this, and is recognized by vendors as a strategically
The Spring Framework provides solutions to many technical challenges faced
by Java developers and organizations wanting to create applications based on
the Java platform. Because of the sheer vastness of the functionality offered,
it can be hard to distinguish the major building blocks from which the
framework is composed. The Spring Framework is not exclusively linked to the Java
Enterprise platform, although its far-reaching integration in this area is an
important reason for its popularity.
The Spring Framework is probably best known for offering features required
to create complex business applications effectively outside of the programming
models which have been dominant historically in the industry. Next to that, it
is also credited for introducing previously unfamiliar functionalities into
today's mainstream development practices, even beyond the Java platform.
This amounts to a framework which offers a consistent model and makes it
applicable to most application types created on top of the Java platform today.
[Modules of the Spring Framework
The Spring Framework can be considered as a collection of smaller
frameworks. Most of these frameworks are designed to work independently of each
other yet provide better functionalities when used together. These frameworks
are divided along the building blocks of typical complex applications:
- Inversion of Control
container: configuration of application components and lifecycle
management of Java objects.
programming framework: working with functionalities which cannot be
implemented with Java's object-oriented programming capabilities without
- Data access framework:
working with relational database management systems on the Java platform
using JDBC and Object-relational mapping tools providing solutions to
technical challenges which are reusable in a multitude of Java-based
- Transaction management
framework: harmonization of various transaction management API's and
configurative transaction management orchestration for Java objects.
framework: HTTP and Servlet based framework providing many hooks for
extension and customization.
- Remote Access framework:
configurative RPC-style export and import of Java objects over computer
networks supporting RMI, CORBA and HTTP-based protocols including web
- Authentication and authorization
framework: configurative orchestration of authentication and
authorization processes supporting many popular and industry-standard
standards, protocols, tools and practices via the Acegi sub-project.
- Remote Management
framework: configurative exposure and management of Java objects for
local or remote configuration via JMX.
- Messaging framework: configurative
registration of message listener objects for transparent message
consumption from message queues via JMS, improvement of message sending
over standard JMS API's.
- Testing framework:
support classes for writing unit tests and integration tests.