Read without ads and support Scribd by becoming a Scribd Premium Reader.
October 2007

Since I last revised this article in May, 2005, the Spring Framework has continued to
grow in popularity, and has become the de facto standard for enterprise Java
development. It has progressed from version 1.2 to the present 2.5, and has been adopted
in an even wider range of industries and projects. In this article, I'll try to explain what
Spring sets out to achieve, and how I believe it can help you to develop enterprise Java
applications.

Why Spring?
I believe that Spring is unique, for several reasons:
\u2022
It addresses important areas that other popular frameworks don't. Spring
focuses around providing a way to manage your business objects.
\u2022
Spring is 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.

\u2022
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.
\u2022
Spring is an increasingly important integration technology, its role recognized
by vendors large and small.
\u2022
The Spring Framework is the core of the Spring Portfolio , an increasingly
complete solution for enterprise Java development, exhibiting the same
consistency of approach developed in the Spring Framework itself.
Spring addresses 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 core architectural concepts go back to
early 2000, and reflect my experience in developing infrastructure for a series of
successful commercial projects.

There are now almost 40 developers, with the leading contributors devoted full-time to Spring development and support at Interface21. The flourishing open source community has helped it evolve into far more than could have been achieved by any individual.

Architectural benefits of Spring
Before we get down to specifics, let's look at some of the benefits Spring can bring to a
project:
\u2022
Spring can effectively organize your middle tier objects. 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 Spring's configuration management services can be used in any architectural layer, in whatever runtime environment.

\u2022
Spring can eliminate the proliferation of Singletons seen on many projects. In
my experience, this is a major problem, reducing testability and object orientation.
\u2022
Spring eliminates 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.

\u2022
Spring facilitates good programming practice by reducing the cost of
programming to interfaces, rather than classes, almost to zero.
\u2022
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.
\u2022
Applications built using Spring are very easy to test. For certain unit testing

scenarios, the Spring Framework provides mock objects and testing support
classes. Spring also provides unique \u201cintegration testing\u201d functionality in the form
of the Spring TestContext Framework and legacy JUnit 3.8 support classes that
enable you to test your code quickly and easily, even while accessing a staging
database.

\u2022
Spring helps you solve problems with the most lightweight possible
infrastructure. Spring provides 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, or want to avoid two phase
commit.

\u2022
Spring provides a consistent framework for data access, whether using JDBC
or an O/R mapping product such as TopLink, Hibernate or a JPA or JDO
implementation.
\u2022
Spring provides a consistent, simple programming model in many areas,
making it 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 Plain Old Java Objects (POJOs). It enables you to develop components as

POJOs containing only your business logic, while the framework takes care of the many
value adds you need to build enterprise applications \u2014 even in areas that you may not
have considered when initially authoring the application. This goal requires a
sophisticated framework, which conceals much complexity from the developer. Because
your business logic is abstracted from infrastructure concerns, it\u2019s also likely to enjoy a
longer life, improving the return on investment of writing it. Business logic should
change at the pace of your business; only if it is abstracted from infrastructure concerns
can the impact on your code base of inevitable infrastructure change (such as choice of
application server) be minimized.

Thus Spring can enable you to implement the simplest possible solution to your
problems. And that's worth a lot.
What does Spring do?
Spring provides a lot of functionality. So I'll quickly review each major area in turn.
Mission statement

Spring's main aim is to make enterprise Java easier to use and promote good
programming practice. It does this by enabling a POJO-based programming model that is
applicable in a wide range of environments. We believe that Spring provides the ultimate
programming model for modern enterprise Java.

Spring does not reinvent the wheel. Thus you'll find no logging packages in Spring, no
connection pools, no distributed transaction coordinator. All these things are provided by
open source projects (such as Commons Logging, which we use for all our log output, or
Commons DBCP), or by your application server or web container. For the same reason,
we don't provide an O/R mapping layer. There are good solutions to this problem such as
TopLink, Hibernate, JPA and JDO.

Spring does aim to make existing technologies easier to use and does aim to provide a unified, simple yet powerful programming model. For example, although we are not in the business of low-level transaction coordination, we provide an abstraction layer over JTA or any other transaction strategy that is more portable, easier to use and makes code easier to test.

Spring benefits from internal consistency. All the developers are singing from the same
hymn sheet, whose fundamental ideas remain faithful to those of Expert One-on-One
J2EE Design and Development. And we've been able to use some central concepts, such
as Inversion of Control, across multiple areas.
Spring is portable between application servers and web containers. (Indeed, its core
functionality does not require another container.) Of course ensuring portability is always
Search History:
Searching...
Result 00 of 00
00 results for result for
  • p.
  • Notes
    Load more