spring-framework/spring-framework-reference/src/new-in-3.xml

291 lines
9.0 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<chapter id="new-in-3">
<title>What's new in Spring 3.0?</title>
<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. 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>Furthermore, Spring is compatible with J2EE 1.4 and Java EE 5, while
at the same time introducing some early support for Java EE 6.</para>
</sidebar>
<section id="new-in-3-intro">
<title>Java 5</title>
<para>The entire framework code has been revised to take advantage of Java
5 features like generics, varargs and other language improvements. We have
done our best to still keep the code backwards compatible. We now have
consistent use of generic Collections and Maps, consistent use of
generified FactoryBeans, and also consistent resolution of bridge methods
in the Spring AOP API. Generified ApplicationListeners automatically
receive specific event types only. All callback interfaces such as
TransactionCallback and HibernateCallback declare a generic result value
now. Overall, the Spring core codebase is now freshly revised and
optimized for Java 5.</para>
<para>Spring's TaskExecutor abstraction has been updated for close
integration with Java 5's java.util.concurrent facilities. We provide
first-class support for Callables and Futures now, as well as
ExecutorService adapters, ThreadFactory integration, etc. This has been
aligned with JSR-236 (Concurrency Utilities for Java EE 6) as far as
possible. Furthermore, we provide support for asynchronous method
invocations through the use of the new @Async annotation (or EJB 3.1's
@Asynchronous annotation).</para>
</section>
<section id="new-in-3-improved-docs">
<title>Improved documentation</title>
<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>
<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>Spring Expression Language</para>
</listitem>
<listitem>
<para>IoC enhancements/Spring JavaConfig</para>
</listitem>
<listitem>
<para>Comprehensive REST support</para>
</listitem>
<listitem>
<para>@MVC additions</para>
</listitem>
<listitem>
<para>Declarative model validation</para>
</listitem>
<listitem>
<para>Early support for Java EE 6</para>
</listitem>
</itemizedlist>
</section>
<section id="new-feature-java5">
<title>Core APIs updated for Java 5</title>
<para>BeanFactoryinterface returns typed bean
instancesas far as possible
<itemizedlist>
<listitem>T getBean(Stringname, Class&lt;T&gt; requiredType)</listitem>
<listitem>Map&lt;String, T&gt; getBeansOfType(Class&lt;T&gt; type)</listitem>
</itemizedlist>
</para>
<para>Spring's TaskExecutorinterface extends
<classname>java.util.concurrent.Executor</classname> now
<itemizedlist>
<listitem>extended AsyncTaskExecutor supports standard Callables with Futures</listitem>
</itemizedlist>
</para>
<para>New Java 5 based converter API and SPI
<itemizedlist>
<listitem>stateless ConversionService and Converters</listitem>
</itemizedlist>
<itemizedlist>
<listitem>superseding standard JDK PropertyEditors</listitem>
</itemizedlist>
</para>
<para>Typed ApplicationListener&lt;E&gt;
</para>
</section>
<section id="new-feature-el">
<title>Spring Expression Language</title>
<para>Spring introduces an expression language which is similar to Unified
EL in its syntax but offers significantly more features. The expression
language can be used when defining XML and Annotation based bean
definitions and also serves as the foundation for expression language
support across the Spring portfolio. Details of this new functionality can
be found in the chapter <link linkend="expressions">Spring Expression
Language (SpEL).</link></para>
<para>The Spring Expression Language was created to provide the Spring community with a single well
supported expression language that can used across all the products in the Spring portfolio. Its language
features are driven by the requirements of the projects in the Spring portfolio, including tooling
requirements for code completion support within the eclipse based SpringSource Tool Suite.</para>
<para>The following is an example of how the Expression Language can be used to configure some properties
of a database setup
<programlisting language="xml"><![CDATA[
<bean class="mycompany.RewardsTestDatabase">
<property name="databaseName"
value="“#{systemProperties.databaseName}”/>
<property name="keyGenerator"
value="“#{strategyBean.databaseKeyGenerator}”/>
</bean>
]]></programlisting>
</para>
</section>
<section id="new-feature-java-config">
<title>The Inversion of Control (IoC) container</title>
<para>Core JavaConfig features added</para>
</section>
<section id="new-feature-rest">
<title>The Web Tier</title>
<para>Work in progress</para>
<section>
<title>Comprehensive REST support</title>
<para>Work in progress</para>
</section>
<section>
<title>@MVC additions</title>
<para>Work in progress</para>
</section>
</section>
<section id="new-feature-validation">
<title>Declarative model validation</title>
<para>Hibernate Validator, JSR 303</para>
</section>
<section id="new-feature-jee-6">
<title>Early support for Java EE 6</title>
<para>JSF 2.0, JPA 2.0, etc</para>
</section>
</chapter>