如果你已经用了一段时间Spring Framework,那你将发现Spring正在经历着一场大的修订。
修订版引入一些新特性,总结并改进了许多现有功能。实际上,Spring得到了大量有价值的更新,以至于Spring开发团队决定在Spring的下一个版本里修改版本号;所以2005年12月,在佛罗里达召开的Spring经验交流会上,Spring 2.0 问世了。
本章是对Spring 2.0新特性与改进特性的向导。我们希望提供一个高层的概述使那些有经验的Spring架构师与开发人员能很快熟悉Spring 2.0的新功能。 如果想了解关于特性更多更深层的信息,请参考在本章里超链接的相应部分。
Spring 2.0 相当大的改进之一就是Spring的IoC容器。
多亏了新的XML配置语法的产生,Spring的XML配置变的更加简单了。如果你想充分利用Spring提供的新标签(Spring团队当然建议你这么做,因为他们使配置变的不再繁琐,更加易于阅读),请阅读标题为 Appendix A, XML Schema-based configuration 的部分。
XML配置不仅更加易于书写,而且也具有可扩展性。
这里'可扩展性'的含义是,作为一个应用程序开发人员,或着(更可能)作为第三方框架或产品的供应商,可以开发自定义标签,供其他开发人员把这些标签嵌入到自己的Spring配置文件里。你可以在组件的特定配置中定义你自己的DSL(domain specific language,这个词在这里用得比较宽泛)。
对于个别应用的开发人员或者在项目中运用Spring的企业架构师来说,实现自定义Spring标签可能不是他们的兴趣所在。我们期待着第三方供应商能够对开发在Spring配置文件里使用的自定义配置标签予于足够的关注。
可扩展的配置机制在 Appendix B, Extensible XML authoring 里有更充分的描述。
Spring上个版本的IoC容器支持两个不同的bean作用域(单例与原型)。Spring 2.0改进了这一点,不仅提供了一些依赖于Spring部署环境(比如说,在web环境中的request和session作用域bean)的额外的作用域,而且提供了所谓的'钩子'('hooks')(因为找不到更好的表达)使Spring用户可以创造自己的作用域。
应该注意的是,即使单例与原型作用域beans的基本(内在)实现发生了变化,上述变化对最终用户来说是透明的...现有的配置不需要改变或放弃。
在标题为 Section 3.4, “bean的作用域” 的部分有对新增的作用域与原有作用域的详细描述。
Spring 2.0在AOP上有很大的改进。Spring AOP框架本身就十分易于用XML配置(因此不再那么繁琐);Spring 2.0集成了AspectJ 切入点(pointcut)语言和 @AspectJ 切面(aspect)声明类型。 标题为 Chapter 6, 使用Spring进行面向切面编程(AOP) 的部分专门描述这个新支持。
Spring 2.0引入了新的模式,支持定义从常规Java对象中发展中来的切面。 此支持充分利用了AspectJ切入点语言,提供了完整类型的通知(advice)(也就是没有多余转换和 Object[] 参数操作)。 标题为 Section 6.3, “Schema-based AOP support” 的部分详细描述了该支持的细节。
Spring 2.0也支持使用@AspectJ注解定义的切面。这些切面可以在AspectJ与Spring AOP中共享,仅仅需要(老实说!)一些简单的配置。 在标题为 Section 6.2, “@AspectJ支持” 的部分讨论了对@AspectJ 切面的支持。
Spring 2.0关于事务的配置方式发生了重大的变化。早先的1.2.x版本的配置方式仍然有效(并且受支持),但是新的方式明显更加简洁,并成为最推荐的方式。 Spring 2.0 同时提供了AspectJ切面库,你可以使用它来生成更漂亮的事务性对象 - 甚至可以不是由Spring事务性容器产生的。
标题为 Chapter 9, 事务管理 的部分包含所有的细节。
Spring 2.0提供了JPA抽象层,在所起的作用与常规使用模式上,类似于Spring的JDBC抽象层。
如果你对使用实现JPA作为自己持久层的基础感兴趣,标题为 Section 12.7, “JPA” 的部分专门描述了在这个领域Spring的支持与附加值。
在Spring 2.0之前,Spring的JMS的作用局限于产生消息。这个功能(封装在 JmsTemplate 类中)当然是很好的, 但是,它没有描述完整的JMS堆栈,比如像消息的 异步 产生和消耗。
JMS堆栈缺少的这一部分已经被添加,Spring 2.0现在提供对消息异步消耗的完整支持。 在标题为 Section 19.4.2, “异步接收 - 消息驱动的POJOs” 的部分有详细的描述。
在Spring的JDBC抽象框架中,有几个新的值得注意的类。首先,NamedParameterJdbcTemplate, 提供了在编写JDBC语句时,对使用命名参数(与之相对的是编写JDBC语句时只使用常规的占位符('?'))的支持。
另一个新类,SimpleJdbcTemplate,致力于更加简单地使用Spring JDBC抽象层框架的核心类 JdbcTemplate。但是该类只能在使用Java 5(Tiger)下生效。
在Spring 2.0里,web层支持得到了 充分地 改进和扩展。
Spring MVC丰富的JSP标签库 来自 JIRA,其中的绝大部分是Spring用户(范围很广的用户)通过投票方式产生的。
Spring 2.0拥有一个丰富的JSP标签库,在使用Spring MVC时,编写JSP页面变得更加简单;Spring团队自信地认为它将满足所有在JIRA上投票的开发人员的需要。在标题为 Chapter 13, Web框架 的部分描述了新的标签库,标题为 Appendix E, spring-form.tld 的附录部分是对所有新标签的快速指南。
对于很多项目而言,遵守建立好的规范,使用合理的默认值,是它们(项目)所必须的... 现在在SpringMVC里,惯例优先(convention-over-configuration)的观点有了明确的支持。 这就意味着当你建立一系列的命名规范或相似的东西时,你可以 充分 减少配置的数量,包括设置处理映射、视图解析、ModelAndView的实例等等。 对于开发快速原型来说,这有非常大的优势,并且越过代码库可以产生一定的连续性(通常是良好的),使的你可以把它搬到具体的应用中。
在标题为 Section 13.11, “惯例优先原则(convention over configuration)” 的部分,可以发现对Spring MVC的惯例优先支持的详细内容。
Spring 2.0 设计了一种本质上类似于Spring MVC框架的Porlet框架。标题为 Chapter 16, Portlet MVC框架 的部分可以找到详细的介绍。
在以上章节中未被提及的,关于Spring 2.0的新特性与改进特性,都包含在最后部分。
Spring 2.0现在支持用非Java语言编写的bean。当前支持的动态语言包括JRuby,Groovy和BeanShell。标题为 Chapter 24, 动态语言支持 部分描述了动态语言支持的细节。
Spring对JMX支持的变化更具有进步意义,看看下面列表中的部分,直接转到JMX的变化篇。
关于任务规划,Spring 2.0 提供了一种抽象。对于感兴趣的开发人员,标题为 Section 23.4, “SpringTaskExecutor抽象” 的部分提供了所有的细节。
如果你有幸使用Java 5(Tiger)进行项目开发,你将很高兴地发现,Spring 2.0对于Tiger有一些非常引人注目的支持。(下面是一系列Spring Java 5 独有特性的指南)
我们同样更新了一些样例应用以反映Spring 2.0的新特性与改进特性,请抽出时间仔细研究。 上述样例放在Spring完整发行版里的'samples'路径下 ('spring-with-dependecies.[zip|tar.gz]')。
上述发行版同时提供了一些所谓的体现特性优势的应用。这些应用有严格的使用范围限制,仅仅是体现Spring 2.0某个新特性的有效例子。 这意味着你可以在这些应用中运行代码,而不需再自己创建小工程测试Spring 2.0的新特性。 我们故意将这些应用的作用域设定的很小;作用域模型(如果有的话)可能只有一两个类,而典型的企业关注点,如安全和事务完整性,显然没有包含在内。
Spring参考文档(您当前正在阅读的这份)理所当然的进行了充分的更新,以反映上述Spring 2.0的新特性。
尽管我们竭尽所能立争这份文档不会出现错误,但是人非圣贤,错误在所难免。 如果您发现了一些打印排版或者更严重的错误,并可以抽出一些空闲时间来的话, 请通过 Spring Framework's JIRA site 把错误发给Spring团队。