原文地址:http://www.infoq.com/news/2009/12/spring30
同志们,Spring框架的3.0版本终于在今天发布啦。InfoQ特别对话了Spring框架项目的技术头领Juergen Hoeller,从他口中了解到不少关于这次发布对Spring集团带来的改变。
Hoeller详细罗列了Spring 3.0中的各项新特性:
* 基于Java 5 - 目前核心API已经使用了Java 5的特性,诸如泛型、注解等等,因此现在Spring 3.0必须使用Java 5和以后版本才能跑起来。
* Spring表达式语言(SpEL) - 这个和JSF中的统一EL类似,我们可以很容易在Spring 3.0中使用复杂表达式了。
* 提升对基于注解组件的支持 - Spring JavaConfig其中的一些功能已经被迁移到核心框架中,比如@Configuration,@Bean和@DependsOn。
* 可以使用约束注解声明对模型的校验方式 - 提供了对JSR 303的支持,我们可以使用注解为bean添加诸如@NotNull和@Max(23)的校验规则。
* Spring MVC中提供对REST的综合支持 - 添加了在服务器端和客户端使用RESTful应用的功能。
* 提供对Java EE 6的支持 - 支持了许多Java EE 6中的功能,比如JPA 2.0和JSF 2.0,让它们可以运行在非EE 6的容器下,比如Tomcat和J2EE 1.4应用服务器。
* 提供对JSR 330的支持 - 现在Spring已经支持了JSR 330中介绍的javax.inject注解。
* 基于注解进行格式化 - bean的属性可以使用注解来自动进行格式化和类型转换,比如@DateFimeFormat(iso=ISO.DATE)和@NumberFormat(style=Style.CURRENCY)。
Spring还提供了完整的修改日志和参考文档。(译者注:文档方面Spring做的确实太好了,也再次感谢满江红团队的辛勤劳动。)
Hoeller在提到SpEL时,多说了那么几句:
SpEL是一种功能强大的表达式语言,语法基于统一表达式(Unified
EL),实际上它与JSF中使用的表达式非常类似。我们特别为SpEL开发了自己的表达式解析器以提供特定的功能,无论是在使用bean定义配置还是使用
Spring
Integration这类项目时都可以带来不少好处。其实在Spring核心中已经有很多地方都应用了像"#{...}"这样的表达式,可以在XML的
bean定义中看到许多这样的例子。还有@Value这个注解,它可以通过名称动态引用其他的bean,并且可以非常简单就获取这些bean的属性。
举个例子,下面这段XML配置(来自3.0参考文档)使用了SpEL来配置bean的属性,属性值来自于JVM系统参数:
<bean class="mycompany.RewardsTestDatabase">
<property name="databaseName"
value="#{systemProperties.databaseName}"/>
<property name="keyGenerator"
value="#{strategyBean.databaseKeyGenerator}"/>
</bean>
Hoeller也着重介绍了Spring 3.0中对REST的支持:
我们面对的挑战是在Spring
MVC的世界中加入对REST的支持,把这种强大的新功能交到MVC用户的手中。我们决定从底层为MVC支持路径变量的提取 -
这部分内容协商的方向是正确的 - 考虑到Spring
MVC的实力,并把它们拉升到另一种层次,同时又不会破坏基本架构。工作进展的非常顺利,可以在已有的Spring MVC应用中使用REST的特性。
我们的重点聚焦在web用户接口在REST下的转换方式上。下一步呢,在Spring MVC的基础上实现基于REST的网络服务(Web
Service)也是很有意思的一件事情,特别是OXM(Object/XML
Mapping)现在已经成为了Spring核心模块之一,OXM可以和Spring
MVC联合应用。最后,我们提供了RestTemplate类,这是一个Spring式的模板类,它作为客户端提供了与面向REST终端服务器进行交互的
更易用的编程方式。
对于那些工作在Spring 2.5之上,并且已经在代码中使用了基于注解样式的同志们,这次升级的路线将是非常平滑的 -
新功能可以在升级到3.0之后任意选择使用,不需要对基础架构进行任何修改。对于那些还在使用老版本,比如继承了表单控制器,这些功能在3.0中还是可以
继续使用的,只是这些功能都已经被标记为“被废弃了”(deprecated)。如果想使用3.0中的新特性,就必须先使用基于注解的@MVC样式。对于
Spring 2.0用户,99%的代码依然可以正常运行,但是对一些老组件的支持,比如Apache Commons Attributes,
WebLogic 8.1 和 WebSphere 5.1,都已经被删除了。
当提起Spring框架的未来计划时,Hoeller提到开发会受到Spring集团中的其他项目的很大影响,比如Spring Integration, Spring Web Flow, Spring Source dm Server和Spring Roo等
等。在3.1的发布的新特性就会被Spring Integration 2.0和Spring Web
Flow所影响,比如计划中的第一类会话管理(first-class conversation
management),扩充作用域(scope)和细化基于注解的组件模型。2010年中旬中的3.1发布之后,会进入3.2版本,对于3.2版本的具
体计划还没有最终完成。