started "new in Spring 3" chapter; added some overview to introduction chapter

This commit is contained in:
Thomas Risberg 2009-04-01 03:35:39 +00:00
parent 4ebd08515c
commit 8a6e51922a
2 changed files with 282 additions and 76 deletions

View File

@ -5,36 +5,207 @@
<section id="new-in-3-intro">
<title>Introduction</title>
<para>*** WORK IN PROGRESS ***</para>
<para>If you have been using the Spring Framework for some time, you will
be aware that Spring has undergone two major revisions: Spring 2.0,
released in October 2006, and Spring 2.5, released in November 2007.</para>
released in October 2006, and Spring 2.5, released in November 2007. It is
now time for a third overhaul resulting in Spring 3.0.</para>
<sidebar id="new-in-3-intro-java">
<title>Java SE and Java EE Support</title>
<para>The Spring Framework is now based on Java 5 and Java 6 is fully supported.</para>
<para>The Spring Framework is now based on Java 5 and Java 6 is fully
supported.</para>
<para>Furthermore, Spring is compatible with J2EE 1.4 and Java EE 5,
while at the same time introducing dedicated support for Java EE 6.</para>
while at the same time introducing some early support for Java EE
6.</para>
</sidebar>
</section>
<section id="new-in-3-other-documentation">
<section id="new-in-3-improved-docs">
<title>Improved documentation</title>
<para>The Spring reference documentation has also substantially been
updated to reflect all of the changes and new features for Spring 3.0.
While every effort has been made to ensure that there are no errors in this
documentation, some errors may nevertheless have crept in. If you do spot
any typos or even more serious errors, and you can spare a few cycles
during lunch, please do bring the error to the attention of the Spring
team by <ulink
url="http://jira.springframework.org/">raising an
issue</ulink>.</para>
<sidebar id="new-in-3-intro-work-in-progress">
<title>Note:</title>
<para>The current documentation is a <emphasis>*** WORK IN PROGRESS
***</emphasis> and is currently being re-written to reflect all the
changes in the framework and from now relying on Java 5 features.</para>
</sidebar>
<para>The Spring reference documentation has also substantially been
updated to reflect all of the changes and new features for Spring 3.0.
While every effort has been made to ensure that there are no errors in
this documentation, some errors may nevertheless have crept in. If you do
spot any typos or even more serious errors, and you can spare a few cycles
during lunch, please do bring the error to the attention of the Spring
team by <ulink url="http://jira.springframework.org/">raising an
issue</ulink>.</para>
</section>
</chapter>
<section id="new-in-3-modules-build">
<title>New module organization and build system</title>
<para>The framework modules have been revised and are now managed
separately with one source-tree per module jar:</para>
<itemizedlist>
<listitem>
<para>org.springframework.aop</para>
</listitem>
<listitem>
<para>org.springframework.beans</para>
</listitem>
<listitem>
<para>org.springframework.context</para>
</listitem>
<listitem>
<para>org.springframework.context.support</para>
</listitem>
<listitem>
<para>org.springframework.expression</para>
</listitem>
<listitem>
<para>org.springframework.instrument</para>
</listitem>
<listitem>
<para>org.springframework.jdbc</para>
</listitem>
<listitem>
<para>org.springframework.jms</para>
</listitem>
<listitem>
<para>org.springframework.orm</para>
</listitem>
<listitem>
<para>org.springframework.oxm</para>
</listitem>
<listitem>
<para>org.springframework.test</para>
</listitem>
<listitem>
<para>org.springframework.transaction</para>
</listitem>
<listitem>
<para>org.springframework.web</para>
</listitem>
<listitem>
<para>org.springframework.web.portlet</para>
</listitem>
<listitem>
<para>org.springframework.web.servlet</para>
</listitem>
</itemizedlist>
<sidebar id="new-in-3-intro-spring-jar">
<title>Note:</title>
<para>The spring.jar artifact that contained almost the entire framework
is no longer provided.</para>
</sidebar>
<para>We are now using a new Spring build system as known from Spring Web
Flow 2.0. This gives us:</para>
<itemizedlist>
<listitem>
<para>Ivy-based "Spring Build" system</para>
</listitem>
<listitem>
<para>consistent deployment procedure</para>
</listitem>
<listitem>
<para>consistent dependency management</para>
</listitem>
<listitem>
<para>consistent generation of OSGi manifests</para>
</listitem>
</itemizedlist>
</section>
<section id="new-in-3-features-overview">
<title>Overview of new features</title>
<para>This is a list of new features for Spring 3.0. We will cover these
features in more detail in the following sections.</para>
<itemizedlist>
<listitem>
<para>Java 5+ foundation</para>
<para>compatible with J2EE 1.4 and Java EE 5</para>
</listitem>
<listitem>
<para>Spring Expression Language</para>
<para>Unified EL++</para>
</listitem>
<listitem>
<para>Container enhancements</para>
<para>Core JavaConfigfeatures added</para>
</listitem>
<listitem>
<para>Comprehensive REST support</para>
<para>and other Spring @MVC additions</para>
</listitem>
<listitem>
<para>Declarative model validation</para>
<para>Hibernate Validator, JSR 303</para>
</listitem>
<listitem>
<para>Early support for Java EE 6</para>
<para>JSF 2.0, JPA 2.0, etc</para>
</listitem>
</itemizedlist>
</section>
<section id="new-feature-java-5">
<title>Java 5+ foundation</title>
<para><emphasis>*** WORK IN PROGRESS ***</emphasis></para>
</section>
<section id="new-feature-el">
<title>Spring Expression Language</title>
<para><emphasis>*** WORK IN PROGRESS ***</emphasis></para>
</section>
<section id="new-feature-java-config">
<title>Container enhancements</title>
<para><emphasis>*** WORK IN PROGRESS ***</emphasis></para>
</section>
<section id="new-feature-rest">
<title>Comprehensive REST support</title>
<para><emphasis>*** WORK IN PROGRESS ***</emphasis></para>
</section>
<section id="new-feature-validation">
<title>Declarative model validation</title>
<para><emphasis>*** WORK IN PROGRESS ***</emphasis></para>
</section>
<section id="new-feature-jee-6">
<title>Early support for Java EE 6</title>
<para><emphasis>*** WORK IN PROGRESS ***</emphasis></para>
</section>
</chapter>

View File

@ -2,70 +2,105 @@
<chapter id="introduction">
<title>Introduction</title>
<sidebar id="background-ioc">
<title>Background</title>
<para>Fundamentally, what is Spring? We think of it as a Platform for your Java code. It provides
comprehensive infrastructural support for developing Java applications. Spring deals with the plumbing
so you can focus on solving the domain problem</para>
<para>In early 2004, Martin Fowler asked the readers of his site: when
talking about Inversion of Control: <quote><emphasis>the question is, what
aspect of control are [they] inverting?</emphasis></quote>. Fowler then
suggested renaming the principle (or at least giving it a more
self-explanatory name), and started to use the term <firstterm>Dependency
Injection</firstterm>. His article then continued to explain the ideas
underpinning the Inversion of Control (<acronym>IoC</acronym>) and
Dependency Injection (<acronym>DI</acronym>) principle.</para>
<para>Spring as a platform allows applications to be built from “plain old Java objects” (POJOs). This is true
for the Java SE programming model as well as within a number of other environments including full and partial Java EE.
Spring allows enterprise services to be applied to POJOs in a non-invasive way</para>
<para>If you need a decent insight into IoC and DI, please do refer to
said article : <ulink
url="http://martinfowler.com/articles/injection.html">http://martinfowler.com/articles/injection.html</ulink>.</para>
</sidebar>
<para>Examples of Spring as a platform:</para>
<para>Java applications (a loose term which runs the gamut from constrained
applets to full-fledged n-tier server-side enterprise applications)
typically are composed of a number of objects that collaborate with one
another to form the application proper. The objects in an application can
thus be said to have <emphasis>dependencies</emphasis> between
themselves.</para>
<itemizedlist>
<listitem>
<para>Make a Java method execute in a database transaction; without the implementer dealing with transaction
APIs</para>
</listitem>
<para>The Java language and platform provides a wealth of functionality for
architecting and building applications, ranging all the way from the very
basic building blocks of primitive types and classes (and the means to
define new classes), to rich full-featured application servers and web
frameworks. One area that is decidedly conspicuous by its absence is any
means of taking the basic building blocks and composing them into a coherent
whole; this area has typically been left to the purvey of the architects and
developers tasked with building an application (or applications). Now to be
fair, there are a number of design patterns devoted to the business of
composing the various classes and object instances that makeup an
all-singing, all-dancing application. Design patterns such as
<firstterm>Factory</firstterm>, <firstterm>Abstract Factory</firstterm>,
<firstterm>Builder</firstterm>, <firstterm>Decorator</firstterm>, and
<firstterm>Service Locator</firstterm> (to name but a few) have widespread
recognition and acceptance within the software development industry
(presumably that is why these patterns have been formalized as patterns in
the first place). This is all very well, but these patterns are just that:
best practices given a name, typically together with a description of what
the pattern does, where the pattern is typically best applied, the problems
that the application of the pattern addresses, and so forth. Notice that the
last paragraph used the phrase <quote>... a <emphasis>description</emphasis>
of what the pattern does...</quote>; pattern books and wikis are typically
listings of such formalized best practice that you can certainly take away,
mull over, and then <emphasis>implement yourself</emphasis> in your
application.</para>
<listitem>
<para>Make a local Java method a remote-procedure; without the implementer dealing with remoting APIs</para>
</listitem>
<para>The IoC component of the Spring Framework addresses the enterprise
concern of taking the classes, objects, and services that are to compose an
application, by providing a formalized means of composing these various
disparate components into a fully working application ready for use. The
Spring Framework takes best practices that have been proven over the years
in numerous applications and formalized as design patterns, and actually
codifies these patterns as first class objects that you as an architect and
developer can take away and integrate into your own application(s). This is
a <firstterm>Very Good Thing Indeed</firstterm> as attested to by the
numerous organizations and institutions that have used the Spring Framework
to engineer robust, <emphasis>maintainable</emphasis> applications.</para>
<listitem>
<para>Make a local Java method a management operation; without the implementer dealing with JMX APIs</para>
</listitem>
<section id="introduction-overview">
<title>Overview</title>
<listitem>
<para>Make a local Java method a message handler; without the implementer dealing with JMS APIs</para>
</listitem>
</itemizedlist>
<section id="introduction-dependency-injection">
<title>Dependency Injection</title>
<sidebar id="background-ioc">
<title>Background</title>
<para>In early 2004, Martin Fowler asked the readers of his site: when
talking about Inversion of Control: <quote><emphasis>the question is, what
aspect of control are [they] inverting?</emphasis></quote>. Fowler then
suggested renaming the principle (or at least giving it a more
self-explanatory name), and started to use the term <firstterm>Dependency
Injection</firstterm>. His article then continued to explain the ideas
underpinning the Inversion of Control (<acronym>IoC</acronym>) and
Dependency Injection (<acronym>DI</acronym>) principle.</para>
<para>If you need a decent insight into IoC and DI, please do refer to
said article: <ulink
url="http://martinfowler.com/articles/injection.html">http://martinfowler.com/articles/injection.html</ulink>.</para>
</sidebar>
<para>Java applications (a loose term which runs the gamut from constrained
applets to full-fledged n-tier server-side enterprise applications)
typically are composed of a number of objects that collaborate with one
another to form the application proper. The objects in an application can
thus be said to have <emphasis>dependencies</emphasis> between
themselves.</para>
<para>The Java language and platform provides a wealth of functionality for
architecting and building applications, ranging all the way from the very
basic building blocks of primitive types and classes (and the means to
define new classes), to rich full-featured application servers and web
frameworks. One area that is decidedly conspicuous by its absence is any
means of taking the basic building blocks and composing them into a coherent
whole; this area has typically been left to the purvey of the architects and
developers tasked with building an application (or applications). Now to be
fair, there are a number of design patterns devoted to the business of
composing the various classes and object instances that makeup an
all-singing, all-dancing application. Design patterns such as
<firstterm>Factory</firstterm>, <firstterm>Abstract Factory</firstterm>,
<firstterm>Builder</firstterm>, <firstterm>Decorator</firstterm>, and
<firstterm>Service Locator</firstterm> (to name but a few) have widespread
recognition and acceptance within the software development industry
(presumably that is why these patterns have been formalized as patterns in
the first place). This is all very well, but these patterns are just that:
best practices given a name, typically together with a description of what
the pattern does, where the pattern is typically best applied, the problems
that the application of the pattern addresses, and so forth. Notice that the
last paragraph used the phrase <quote>... a <emphasis>description</emphasis>
of what the pattern does...</quote>; pattern books and wikis are typically
listings of such formalized best practice that you can certainly take away,
mull over, and then <emphasis>implement yourself</emphasis> in your
application.</para>
<para>The IoC component of the Spring Framework addresses the enterprise
concern of taking the classes, objects, and services that are to compose an
application, by providing a formalized means of composing these various
disparate components into a fully working application ready for use. The
Spring Framework takes best practices that have been proven over the years
in numerous applications and formalized as design patterns, and actually
codifies these patterns as first class objects that you as an architect and
developer can take away and integrate into your own application(s). This is
a <firstterm>Very Good Thing Indeed</firstterm> as attested to by the
numerous organizations and institutions that have used the Spring Framework
to engineer robust, <emphasis>maintainable</emphasis> applications.</para>
</section>
<section id="introduction-modules">
<title>Modules</title>
<para>The Spring Framework contains a lot of features, which are
well-organized in six modules shown in the diagram below. This chapter
@ -86,7 +121,7 @@
</mediaobject></para>
<para>The <link
linkend="beans-introduction"><emphasis>Core</emphasis></link> package is
linkend="beans-introduction"><emphasis>Core</emphasis></link> module is
the most fundamental part of the framework and provides the IoC and
Dependency Injection features. The basic concept here is the
<classname>BeanFactory</classname>, which provides a sophisticated