Introducing the Spring Framework
The Spring Framework: a popular open source application framework that addresses many
of the issues outlined in this book. This chapter will introduce the basic ideas of Spring and dis-
cuss the central “bean factory” lightweight Inversion-of-Control (IoC) container in detail.
Spring makes it particularly easy to implement lightweight, yet extensible, J2EE archi-
tectures. It provides an out-of-the-box implementation of the fundamental architectural building
blocks we recommend. Spring provides a consistent way of structuring your applications, and
provides numerous middle tier features that can make J2EE development significantly easier and
more flexible than in traditional approaches.
The basic motivations for Spring are:
To address areas not well served by other frameworks. There are numerous good solutions to
specific areas of J2EE infrastructure: web frameworks, persistence solutions, remoting tools, and
so on. However, integrating these tools into a comprehensive architecture can involve significant
effort, and can become a burden. Spring aims to provide an end-to-end solution, integrating spe-
cialized frameworks into a coherent overall infrastructure. Spring also addresses some areas that
other frameworks don’t. For example, few frameworks address generic transaction management,
data access object implementation, and gluing all those things together into an application, while
still allowing for best-of-breed choice in each area. Hence we term Spring an application
framework, rather than a web framework, IoC or AOP framework, or even middle tier framework.
To allow for easy adoption. A framework should be cleanly layered, allowing the use of
indi-vidual features without imposing a whole world view on the application. Many Spring
features, such as the JDBC abstraction layer or Hibernate integration, can be used in a library style
or as part of the Spring end-to-end solution.
To deliver ease of use. As we’ve noted, J2EE out of the box is relatively hard to use to
solve many common problems. A good infrastructure framework should make simple tasks simple
to achieve, without forcing tradeoffs for future complex requirements (like distributed
transactions) on the application developer. It should allow developers to leverage J2EE services
such as JTA where appropriate, but to avoid dependence on them in cases when they are
unnecessarily complex.
To make it easier to apply best practices. Spring aims to reduce the cost of adhering to best
practices such as programming to interfaces, rather than classes, almost to zero. However, it leaves
the choice of architectural style to the developer.
Non-invasiveness. Application objects should have minimal dependence on the framework.
If leveraging a specific Spring feature, an object should depend only on that particular feature,
whether by implementing a callback interface or using the framework as a class library. IoC and
AOP are the key enabling technologies for avoiding framework dependence.
Consistent configuration. A good infrastructure framework should keep application
configuration flexible and consistent, avoiding the need for custom singletons and factories. A
single style should be applicable to all configuration needs, from the middle tier to web
controllers.
Ease of testing. Testing either whole applications or individual application classes in unit