You may be thinking "not another framework." Why should you read
this article, or download the Spring Framework (if you haven't
already), when there are so many J2EE frameworks, or when you could
build your own framework? The sustained high level of interest in
the community is one indication that Spring must offer something
valuable; there are also numerous technical reasons.
I believe that Spring is unique, for several reasons:
It addresses important areas that many other popular
frameworks don't. Spring focuses around providing a way
to manage your business objects.
Spring is both comprehensive and modular.
Spring has a layered architecture, meaning that you can choose to
use just about any part of it in isolation, yet its architecture is
internally consistent. So you get maximum value from your learning
curve. You might choose to use Spring only to simplify use of JDBC,
for example, or you might choose to use Spring to manage all your
business objects. And it's easy to introduce Spring incrementally
into existing projects.
Spring is designed from the ground up to help you write
code that's easy to test. Spring is an ideal framework
for test driven projects.
Spring is an increasingly important integration
technology, its role recognized by several large
vendors.
Spring is not necessarily one more framework dependency for your
project. Spring is potentially a one-stop shop, addressing most
infrastructure concerns of typical applications. It also goes
places other frameworks don't.
An open source project since February 2003, Spring has a long
heritage. The open source project started from infrastructure code
published with my book, Expert One-on-One J2EE
Design and Development, in late 2002. Expert One-on-One J2EE
laid out the basic architectural thinking behind Spring. However,
the architectural concepts go back to early 2000, and reflect my
experience in developing infrastructure for a series of successful
commercial projects.
Since January 2003, Spring has been hosted on SourceForge. There
are now 20 developers, with the leading contributors devoted
full-time to Spring development and support. The flourishing open
source community has helped it evolve into far more than could have
been achieved by any individual.
[separator]
Architectural benefits of Spring
Before we get down to specifics, let's look at some of the
benefits Spring can bring to a project:
Spring can effectively organize your middle tier objects,
whether or not you choose to use EJB. Spring takes care of plumbing
that would be left up to you if you use only Struts or other
frameworks geared to particular J2EE APIs. And while it is perhaps
most valuable in the middle tier, Spring's configuration
management services can be used in any architectural layer, in
whatever runtime environment.
Spring can eliminate the proliferation of Singletons seen on
many projects. In my experience, this is a major problem, reducing
testability and object orientation.
Spring can eliminate the need to use a variety of custom
properties file formats, by handling configuration in a consistent
way throughout applications and projects. Ever wondered what magic
property keys or system properties a particular class looks for,
and had to read the Javadoc or even source code? With Spring you
simply look at the class's JavaBean properties or constructor
arguments. The use of Inversion of Control and
Dependency Injection (discussed below) helps
achieve this simplification.
Spring can facilitate good programming practice by reducing the
cost of programming to interfaces, rather than classes, almost to
zero.
Spring is designed so that applications built with it depend on
as few of its APIs as possible. Most business objects in Spring
applications have no dependency on Spring.
Applications built using Spring are very easy to unit
test.
Spring can make the use of EJB an implementation choice, rather
than the determinant of application architecture. You can choose to
implement business interfaces as POJOs or local EJBs without
affecting calling code.
Spring helps you solve many problems without using EJB. Spring
can provide an alternative to EJB that's appropriate for many
applications. For example, Spring can use AOP to deliver
declarative transaction management without using an EJB container;
even without a JTA implementation, if you only need to work with a
single database.
Spring provides a consistent framework for data access, whether
using JDBC or an O/R mapping product such as TopLink, Hibernate or
a JDO implementation.
Spring provides a consistent, simple programming model in many
areas, making it an ideal architectural "glue." You can see this
consistency in the Spring approach to JDBC, JMS, JavaMail, JNDI and
many other important APIs.
Spring is essentially a technology dedicated to enabling
you to build applications using POJOs. This desirable goal
requires a sophisticated framework, which conceals much complexity
from the developer.
Thus Spring really can enable you to implement the simplest
possible solution to your problems. And that's worth a lot.
[separator]
What does Spring do?
Spring provides a lot of functionality, so I'll quickly review
each major area in turn.