如果你已经用了一段时间Spring Framework,那你将发现Spring正在经历着一场大的修订。
修订版引入一些新特性,总结并改进了许多现有功能。实际上,Spring得到了大量有价值的更新,以至于Spring开发团队决定在Spring的下一个版本里修改版本号; 所以2005年12月,在佛罗里达召开的Spring经验交流会上,Spring 2.0 问世了。
本章是对Spring 2.0新特性与改进特性的向导。我们希望提供一个高层的概述使那些有经验的Spring架构师与开发人员能很快熟悉Spring 2.0的新功能。 如果想了解关于特性更多更深层的信息,请参考在本章里超链接的相应部分。
下面介绍的一些新的或者改进的功能已经(或将要)被加入Spring 1.2.x中。 如果想知道某功能是否被加入1.2.x版本中,请参考1.2.x发布包的changelog。
Spring 2.0 相当大的改进之一就是Spring的IoC容器。
多亏了新的基于XML Schema的XML配置语法的产生,Spring的XML配置变的更加简单了。如果你想充分利用Spring提供的新标签(Spring团队当然建议你这么做,因为他们使配置变的不再繁琐,更加易于阅读),请阅读标题为 AppendixA, XML Schema-based configuration 的部分。
相关提示,请引用新的Spring 2.0 DTD以使用基于XML Schema的配置。下面给出了DOCTYPE声明,如果有兴趣的读者可以详细阅读Spring 2.0发布包的 'dist/resources'目录中的'spring-beans-2.0.dtd' DTD。
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
Spring 上个版本的IoC容器支持两个不同的bean作用域(单例与原型)。Spring 2.0改进了这一点,不仅提供了一些依赖于Spring部署环境(比如说,在web环境中的request和session作用域bean)的额外的作用 域,而且提供了所谓的'钩子'('hooks')(因为找不到更好的表达)使Spring用户可以创造自己的作用域。
应该注意的是,即使单例与原型作用域beans的基本(内在)实现发生了变化,上述变化对最终用户来说是透明的...现有的配置不需要改变或放弃。
在标题为 Section3.4, “bean的作用域” 的部分有对新增的作用域与原有作用域的详细描述。
XML配置不仅更加易于书写,而且也具有可扩展性。
这 里'可扩展性'的含义是,作为一个应用程序开发人员,或着(更可能)作为第三方框架或产品的供应商,可以开发自定义标签,供其他开发人员把这些标签嵌入到 自己的Spring配置文件里。你可以在组件的特定配置中定义你自己的DSL(domain specific language,这个词在这里用得比较宽泛)。
对于个别应用的开发人员或者在项目中运用Spring的企业架构师来说,实现自定义Spring标签可能不是他们的兴趣所在。我们期待着第三方供应商能够对开发在Spring配置文件里使用的自定义配置标签予于足够的关注。
可扩展的配置机制在 AppendixB, Extensible XML authoring 里有更充分的描述。
Spring 2.0在AOP上有很大的改进。Spring AOP框架本身就十分易于用XML配置,不再那么繁琐;Spring 2.0集成了AspectJ 切入点(pointcut)语言和 @AspectJ 切面(aspect)声明类型。 标题为 Chapter6, 使用Spring进行面向切面编程(AOP) 的部分专门描述这个新支持。
Spring 2.0也支持使用@AspectJ注解定义的切面。这些切面可以在AspectJ与Spring AOP中共享,仅仅需要(老实说!)一些简单的配置。 在标题为 Section6.2, “@AspectJ支持” 的部分讨论了对@AspectJ切面的支持。
Spring 2.0关于事务的配置方式发生了重大的变化。早先的1.2.x版本的配置方式仍然有效(并且受支持),但是新的方式明显更加简洁,并成为最推荐的方式。 Spring 2.0 同时提供了AspectJ切面库,你可以使用它来生成更漂亮的事务性对象 - 甚至可以不是由Spring IoC容器产生的。
标题为 Chapter9, 事务管理 的部分包含所有的细节。
Spring 2.0提供了JPA抽象层,在所起的作用与常规使用模式上,类似于Spring的JDBC抽象层。
如果你对使用实现JPA作为自己持久层的基础感兴趣,标题为 Section12.6, “JPA” 的部分专门描述了在这个领域Spring的支持与附加值。
在Spring 2.0之前,Spring的JMS的作用局限于发送消息和同步接收消息。 这个功能(封装在 JmsTemplate 类中)当然是很好的, 但是,它没有满足异步消息接收的需要。
Spring 2.0现在提供对异步消息接收的完整支持。在标题为 Section19.4.2, “异步接收 - 消息驱动的POJOs” 的部分有详细的描述。
在Spring 2.0里,web层支持得到了 充分地 改进和扩展。
对于很多项目而言,遵守建立好的规范,使用合理的默认值,是项目所必须的... 现在在SpringMVC里,惯例优先(convention-over-configuration)的观点有了明确的支持。 这就意味着当你为控制器和视图建立一系列的命名规范时,你可以 充分 减少XML配置的数量,包括设置处理映射、视图解析、ModelAndView的实例等等。 对于开发快速原型来说,这有非常大的优势,并且越过代码库可以产生一定的连续性(通常是良好的)。
在标题为 Section13.11, “惯例优先原则(convention over configuration)” 的部分,可以发现对Spring MVC的惯例优先支持的详细内容。
最后部分罗列了所有其他关于Spring 2.0的新特性与改进特性。
Spring 2.0现在支持用非Java语言编写的bean,当前支持的动态语言包括JRuby,Groovy和BeanShell。标题为 Chapter24, 动态语言支持 部分描述了动态语言支持的细节。
Spring Framework开始支持通知(Notification); 还可以声明式地控制MBean在一个MBeanServer上的注册行为。
如果你有幸使用Java 5(Tiger)进行项目开发,你将很高兴地发现,Spring 2.0对于Tiger有一些非常引人注目的支持。下面是一系列Spring Java 5 独有特性的指南
最后一节中详细说明了从Spring 1.2.x移植到Spring 2.0的过程中可能出现的问题。
先让我们来有所保留地看看下面这句话, 从Spring 1.2移植到Spring 2.0应该就是简单地把Spring 2.0的jar文件放进应用程序目录中的合适位置。
上一句话的关键字理所当然是“应该”。 到底是不是无缝升级依赖于你的代码中究竟用了多少Spring API。 Spring 2.0移除了很多在Spring 1.2.x代码库中标为deprecated的代码,所以如果你用了这些类或方法, 你应该使用它们的替代类或方法(下面总结了些)。
关于配置,Spring 1.2.x风格的XML配置与Spring 2.0完全兼容。你仍然可以继续使用Spring 1.2.x DTD, 不过这样你就不能充分利用一些Spring 2.0的新功能(例如作用域、 更易用的AOP 和 事务配置), 但绝对不会有问题。
建议的移植策略是放入Spring 2.0的jar文件以便能使用改进过的代码(修正bug、优化等等)。 然后增量地开始尝试Spring 2.0的新特性和配置。例如,你可以选择先在切面配置上运用Spring 2.0风格作为开始; 90%的旧式Spring 1.2.x配置(引用1.2.x DTD)加上10%的Spring 2.0配置(引用2.0 DTD和XSD)是完全有效的。要记住, 在使用Spring 2.0库的同时并非一定要升级XML配置。
如需了解全部变化,请参考Spring Framework 2.0发布包顶层目录里的'changelog.txt'文件。
1.2.x和2.0的Spring Framework jar文件有很多不同之处。 特别是现在JDO、Hibernate 2/3、TopLink的ORM集成类有专门的jar文件:它们不再被打包在核心文件 'spring.jar'中了。
Spring 2.0的XSD在描述Spring XML元数据格式方面比先前的DTD更丰富。 旧的DTD仍然得到支持,但如果可能我们鼓励在bean定义文件头部引用XSD文件。
有一点被改变了,那就是定义bean作用域的方式。如果你使用的是Spring 1.2 DTD,那么你能继续用'singleton'属性。 如果你选择引用新的Spring 2.0 DTD,它不允许使用'singleton'属性, 那么可以用'scope'属性来定义bean的生命周期作用域。
一些以前被标记为@deprecated的类和方法Spring 2.0代码库中被完全删除了。 Spring团队决定把2.0版本作为一个新的开始,那些被deprecated的代码应该被除去而不是在可预见的未来继续在代码中出现。
就如前面所说的,如需了解全部变化,请参考Spring Framework 2.0发布包顶层目录里的'changelog.txt'文件。
下面的类/接口已经从Spring 2.0的代码中删除了。
-
ResultReader : 使用RowMapper接口代替。
-
BeanReferenceFactoryBean : 使用别名机制代替
-
BeanDefinitionRegistryBuilder : 使用BeanDefinitionReaderUtils类上的方法代替
-
BeanFactoryBootstrap : 考虑使用一个BeanFactoryLocator 或是自定义引导类代替
-
RequestUtils : 使用ServletRequestUtils代替
请注意iBATIS SQL Maps 1.3支持被完全去除了。如果你还在使用iBATIS SQL Maps 1.3, 请升级到iBATIS SQL Maps 2.0/2.1。
我们同样更新了一些样例应用以反映Spring 2.0的新特性与改进特性,请抽出时间仔细研究。 上述样例放在Spring完整发行版里的'samples'路径下 ('spring-with-dependecies.[zip|tar.gz]')。
上述发行版同时提供了一些所谓的体现特性优势的应用。每个应用都提供了完整的例子,一次演示一个Spring 2.0的新特性。 这意味着你可以在这些应用中运行代码,而不需再自己创建小工程测试Spring 2.0的新特性。我们故意将这些应用的作用域设定的很小; 作用域模型(如果有的话)可能只有一两个类,而典型的企业关注点,如安全和事务完整性,显然没有包含在内。
Spring参考文档理所当然的进行了充分的更新,以反映上述Spring 2.0的新特性。
尽管我们竭尽所能立争这份文档不会出现错误,但是人非圣贤,错误在所难免。 如果您发现了一些打印排版或者更严重的错误,并可以抽出一些空闲时间来的话, 请通过 问题提交 把错误发给Spring团队。
特别感谢Arthur Loder,谢谢他不辞辛劳地校对Spring Framework的参考文档和Javadocs。
分享到:
相关推荐
chapter2-2-1:2.0 新特性(二):新增事件ApplicationStartedEvent Web开发 chapter3-1-1:构建一个较为复杂的RESTful API以及单元测试 chapter3-1-2:使用Thymeleaf模板引擎渲染web视图 chapter3-1-3:使用...
"spring2.0-reference_final_zh_cn.pdf"是Spring 2.0中文参考手册,它详细阐述了Spring 2.0版本的功能和API,包括依赖注入、AOP(面向切面编程)、数据访问、事务管理等核心特性。尽管Spring已经发展到了更高的版本...
通过这些代码,我们可以逐步学习如何构建和实现Web 2.0特性丰富的应用程序。以下是各章节可能涉及的知识点: 1. **Chapter02**:基础配置与搭建环境。这一章通常会介绍如何设置Struts 2项目的基本结构,包括配置...
Chapter 2 - 基础应用架构 本章节介绍了 MINA 的基础应用架构,包括服务端架构和客户端架构。 * 服务端架构:MINA 提供了一个灵活的架构,使得开发者可以轻松地构建高性能的服务端应用程序。 * 客户端架构:MINA ...