`
ihuashao
  • 浏览: 4710673 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Chapter 2. Spring 2.0 的新特性

阅读更多

如果你已经用了一段时间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。

2.2.控制反转(IoC)容器

Spring 2.0 相当大的改进之一就是Spring的IoC容器。

2.2.1.更简单的XML配置

多亏了新的基于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">

2.2.2.新的bean作用域

Spring 上个版本的IoC容器支持两个不同的bean作用域(单例与原型)。Spring 2.0改进了这一点,不仅提供了一些依赖于Spring部署环境(比如说,在web环境中的request和session作用域bean)的额外的作用 域,而且提供了所谓的'钩子'('hooks')(因为找不到更好的表达)使Spring用户可以创造自己的作用域。

应该注意的是,即使单例与原型作用域beans的基本(内在)实现发生了变化,上述变化对最终用户来说是透明的...现有的配置不需要改变或放弃。

在标题为 Section3.4, “bean的作用域” 的部分有对新增的作用域与原有作用域的详细描述。

2.2.3.可扩展的XML编写

XML配置不仅更加易于书写,而且也具有可扩展性。

这 里'可扩展性'的含义是,作为一个应用程序开发人员,或着(更可能)作为第三方框架或产品的供应商,可以开发自定义标签,供其他开发人员把这些标签嵌入到 自己的Spring配置文件里。你可以在组件的特定配置中定义你自己的DSL(domain specific language,这个词在这里用得比较宽泛)。

对于个别应用的开发人员或者在项目中运用Spring的企业架构师来说,实现自定义Spring标签可能不是他们的兴趣所在。我们期待着第三方供应商能够对开发在Spring配置文件里使用的自定义配置标签予于足够的关注。

可扩展的配置机制在 AppendixB, Extensible XML authoring 里有更充分的描述。

2.3.面向切面编程(AOP)

Spring 2.0在AOP上有很大的改进。Spring AOP框架本身就十分易于用XML配置,不再那么繁琐;Spring 2.0集成了AspectJ 切入点(pointcut)语言和 @AspectJ 切面(aspect)声明类型。 标题为 Chapter6, 使用Spring进行面向切面编程(AOP) 的部分专门描述这个新支持。

2.3.1.更加简单的AOP XML配置

Spring 2.0引入了新的模式,支持定义从常规Java对象中发展中来的切面。 此支持充分利用了AspectJ切入点语言,提供了完整类型的通知(advice)(也就是没有多余转换和 Object[] 参数操作)。 标题为 Section6.3, “Schema-based AOP support” 的部分详细描述了该支持的细节。

2.3.2.对@AspectJ 切面的支持

Spring 2.0也支持使用@AspectJ注解定义的切面。这些切面可以在AspectJ与Spring AOP中共享,仅仅需要(老实说!)一些简单的配置。 在标题为 Section6.2, “@AspectJ支持” 的部分讨论了对@AspectJ切面的支持。

2.4.中间层

2.4.1.在XML里更为简单的声明性事务配置

Spring 2.0关于事务的配置方式发生了重大的变化。早先的1.2.x版本的配置方式仍然有效(并且受支持),但是新的方式明显更加简洁,并成为最推荐的方式。 Spring 2.0 同时提供了AspectJ切面库,你可以使用它来生成更漂亮的事务性对象 - 甚至可以不是由Spring IoC容器产生的。

标题为 Chapter9, 事务管理 的部分包含所有的细节。

2.4.2.JPA

Spring 2.0提供了JPA抽象层,在所起的作用与常规使用模式上,类似于Spring的JDBC抽象层。

如果你对使用实现JPA作为自己持久层的基础感兴趣,标题为 Section12.6, “JPA” 的部分专门描述了在这个领域Spring的支持与附加值。

2.4.3.异步的JMS

在Spring 2.0之前,Spring的JMS的作用局限于发送消息和同步接收消息。 这个功能(封装在 JmsTemplate 类中)当然是很好的, 但是,它没有满足异步消息接收的需要。

Spring 2.0现在提供对异步消息接收的完整支持。在标题为 Section19.4.2, “异步接收 - 消息驱动的POJOs” 的部分有详细的描述。

2.4.4.JDBC

在Spring的JDBC支持库中,有几个小的(但同样值得注意的)新类。首先,NamedParameterJdbcTemplate, 提供了在编写JDBC语句时,对使用命名参数(与之相对的是编写JDBC语句时只使用常规的占位符('?'))的支持。

另一个新类,SimpleJdbcTemplate, 致力于在使用Java 5+ (Tiger)开发时更加简单地使用JdbcTemplate

2.5.Web层

在Spring 2.0里,web层支持得到了 充分地 改进和扩展。

2.5.1.Spring MVC的表单标签库

Spring MVC丰富的JSP标签库 来自 JIRA,其中的绝大部分是Spring用户(范围很广的用户)通过投票方式产生的。

Spring 2.0拥有一个丰富的JSP标签库,在使用Spring MVC时,编写JSP页面变得更加简单;Spring团队自信地认为它将满足所有在JIRA上投票的开发人员的需要。在标题为 Section13.9, “使用Spring的表单标签库” 的部分描述了新的标签库,标题为 AppendixE, spring-form.tld 的附录部分是对所有新标签的快速指南。

2.5.2.Spring MVC合理的默认值

对于很多项目而言,遵守建立好的规范,使用合理的默认值,是项目所必须的... 现在在SpringMVC里,惯例优先(convention-over-configuration)的观点有了明确的支持。 这就意味着当你为控制器和视图建立一系列的命名规范时,你可以 充分 减少XML配置的数量,包括设置处理映射、视图解析、ModelAndView的实例等等。 对于开发快速原型来说,这有非常大的优势,并且越过代码库可以产生一定的连续性(通常是良好的)。

在标题为 Section13.11, “惯例优先原则(convention over configuration)” 的部分,可以发现对Spring MVC的惯例优先支持的详细内容。

2.5.3.Portlet 框架

Spring 2.0 设计了一种概念上类似于Spring MVC框架的Porlet框架。标题为 Chapter16, Portlet MVC框架 的部分可以找到详细的介绍。

2.6.其他特性

最后部分罗列了所有其他关于Spring 2.0的新特性与改进特性。

2.6.1.动态语言支持

Spring 2.0现在支持用非Java语言编写的bean,当前支持的动态语言包括JRuby,Groovy和BeanShell。标题为 Chapter24, 动态语言支持 部分描述了动态语言支持的细节。

2.6.2.JMX

Spring Framework开始支持通知(Notification); 还可以声明式地控制MBean在一个MBeanServer上的注册行为。

2.6.3.任务规划

关于任务规划,Spring 2.0 提供了一种抽象。对于感兴趣的开发人员,标题为 Section23.4, “SpringTaskExecutor抽象” 的部分提供了所有的细节。

2.6.4.对Java 5(Tiger)的支持

如果你有幸使用Java 5(Tiger)进行项目开发,你将很高兴地发现,Spring 2.0对于Tiger有一些非常引人注目的支持。下面是一系列Spring Java 5 独有特性的指南

2.7.移植到Spring 2.0

最后一节中详细说明了从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配置。

2.7.1.一些变化

如需了解全部变化,请参考Spring Framework 2.0发布包顶层目录里的'changelog.txt'文件。

2.7.1.1.Jar包

1.2.x和2.0的Spring Framework jar文件有很多不同之处。 特别是现在JDO、Hibernate 2/3、TopLink的ORM集成类有专门的jar文件:它们不再被打包在核心文件 'spring.jar'中了。

2.7.1.2.XML配置

Spring 2.0的XSD在描述Spring XML元数据格式方面比先前的DTD更丰富。 旧的DTD仍然得到支持,但如果可能我们鼓励在bean定义文件头部引用XSD文件。

有一点被改变了,那就是定义bean作用域的方式。如果你使用的是Spring 1.2 DTD,那么你能继续用'singleton'属性。 如果你选择引用新的Spring 2.0 DTD,它不允许使用'singleton'属性, 那么可以用'scope'属性来定义bean的生命周期作用域。

2.7.1.3.Deprecated的类和方法

一些以前被标记为@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代替

2.7.1.4.Apache OJB

请注意Spring主代码中的Apache OJB支持被完全删除了; 但仍然可以在Spring Modules项目中找到Apache OJB的集成库。

2.7.1.5.iBatis

请注意iBATIS SQL Maps 1.3支持被完全去除了。如果你还在使用iBATIS SQL Maps 1.3, 请升级到iBATIS SQL Maps 2.0/2.1。

2.8.更新的样例应用

我们同样更新了一些样例应用以反映Spring 2.0的新特性与改进特性,请抽出时间仔细研究。 上述样例放在Spring完整发行版里的'samples'路径下 ('spring-with-dependecies.[zip|tar.gz]')。

上述发行版同时提供了一些所谓的体现特性优势的应用。每个应用都提供了完整的例子,一次演示一个Spring 2.0的新特性。 这意味着你可以在这些应用中运行代码,而不需再自己创建小工程测试Spring 2.0的新特性。我们故意将这些应用的作用域设定的很小; 作用域模型(如果有的话)可能只有一两个类,而典型的企业关注点,如安全和事务完整性,显然没有包含在内。

2.9.改进的文档

Spring参考文档理所当然的进行了充分的更新,以反映上述Spring 2.0的新特性。

尽管我们竭尽所能立争这份文档不会出现错误,但是人非圣贤,错误在所难免。 如果您发现了一些打印排版或者更严重的错误,并可以抽出一些空闲时间来的话, 请通过 问题提交 把错误发给Spring团队。

特别感谢Arthur Loder,谢谢他不辞辛劳地校对Spring Framework的参考文档和Javadocs。

分享到:
评论

相关推荐

    PHP.Web.2.0开发实战 随书源码chapter-02

    《PHP.Web.2.0开发实战》是一本深入探讨PHP Web开发技术的书籍,随书附带的"chapter-02"源码是作者为了帮助读者更好地理解和实践书中的概念而精心编写的。这一章主要涵盖了Web开发的基础以及PHP语言的关键特性,下面...

    Manning.Spring.in.Action.4th.Edition.2014.11.epub

    Chapter 2. Wiring beans 2.1. Exploring Spring’s configuration options 2.2. Automatically wiring beans 2.2.1. Creating discoverable beans 2.2.2. Naming a component-scanned bean 2.2.3. Setting a base ...

    PHP.Web.2.0开发实战 随书源码chapter-10

    这一部分主要涵盖了第9章和第10章的内容,其中包含两个主要的压缩子文件:`chapter-10-examples`和`chapter-10`。 **第9章可能涉及的知识点:** 1. **PHP与AJAX交互**:Web 2.0的一大特点是动态交互,本章可能讲解...

    .A.Practical.Guide.to.TPM.2.0

    Chapter 2: Basic Security Concepts Chapter 3: Quick Tutorial on TPM 2.0 Chapter 4: Existing Applications That Use TPMs Chapter 5: Navigating the Specification Chapter 6: Execution Environment Chapter ...

    PHP.Web.2.0开发实战 随书源码chapter-04

    此外,可能还涉及到了Web 2.0特性,如社交分享、评论系统、实时更新或者RSS订阅等。 在这一章中,读者可能还会学到如何利用PHP与其他Web服务进行集成,比如使用OAuth进行第三方登录,或者使用RESTful API与外部系统...

    PHP.Web.2.0开发实战 随书源码chapter-12

    4. **AJAX(Asynchronous JavaScript and XML)**:Web 2.0的重要特性,通过JavaScript实现页面的异步更新,提高用户体验。PHP可能在后端处理AJAX请求并返回数据。 5. **JSON数据交换格式**:在Web 2.0应用中,JSON...

    PHP.Web.2.0开发实战 随书源码chapter-06

    《PHP.Web.2.0开发实战》一书的第六章随书源码包含了"chapter-06-examples"和"chapter-06"两个主要部分,这些内容旨在帮助读者深入理解PHP在Web 2.0应用中的实际开发技巧。下面我们将详细探讨其中涉及的知识点。 1....

    PHP.Web.2.0开发实战 随书源码chapter-09

    2. **Web 2.0特性**:了解Web 2.0的核心特征,例如AJAX(异步JavaScript和XML),它使得网页可以在不刷新整个页面的情况下更新部分内容,提供更流畅的用户体验。此外,还有RSS(Really Simple Syndication)用于内容...

    PHP.Web.2.0开发实战 随书源码chapter-11

    1. **Web 2.0概念**:Web 2.0是互联网发展的一个阶段,强调用户参与、互动性和数据共享。这一章可能会介绍如何使用PHP来构建具有这些特性的应用程序。 2. **PHP基础**:PHP是一种服务器端脚本语言,广泛用于网页...

    PHP.Web.2.0开发实战 随书源码chapter-08

    2. **AJAX(异步JavaScript和XML)**:作为Web 2.0的重要技术,AJAX能让网页实现无刷新更新,提升用户体验。PHP开发者需要理解如何在PHP中集成AJAX,以及如何处理AJAX请求。 3. **PHP与JSON**:在Web 2.0中,XML已...

    PHP.Web.2.0开发实战 随书源码chapter-13

    2. **Web 2.0概念**:Web 2.0代表了互联网的互动性和参与性增强,涉及Ajax、富互联网应用程序(RIA)、社交网络等概念。章节中可能讲解了如何利用PHP实现这些特性,比如通过XMLHttpRequest对象进行异步数据交换。 3...

    《精通Spring 2.x-企业应用开发详解》chapter22.rar

    1. **Spring 2.x的新特性**:了解Spring 2.x版本相较于之前的改进和增强,例如对JSR-250注解的支持、改进的AOP模型、更强大的数据访问抽象等。 2. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一...

    PHP.Web.2.0.开发实战.随书源码

    在这个压缩包中,通过各个章节的源代码,你可以学习如何利用PHP实现Web 2.0的核心特性,如Ajax、社交网络功能、数据API集成等。 2. **章节结构与学习路径**: - `README.txt`:通常会提供关于源代码的介绍,包括...

    ASP.NET.2.0.入门经典(第4版)源码

    2. **Chapter03.zip** - 可能深入介绍了ASP.NET 2.0的Web表单,包括表单验证、状态管理(例如视图状态和隐藏字段)以及用户控件的使用。 3. **Chapter04.zip** - 可能讨论了数据绑定和数据源控件,如GridView、...

    PHP.Web.2.0开发实战 随书源码chapter-07

    2. **JSON(JavaScript Object Notation)**:JSON作为一种轻量级的数据交换格式,常用于AJAX通信。与XML相比,JSON解析和生成更快,更易于阅读和编写。在PHP中,可以使用json_encode和json_decode函数进行数据的...

    PHP.Web.2.0开发实战 随书源码chapter-05

    2. **Web 2.0概念**:Web 2.0强调互动性、用户参与和数据共享,这一章可能会讲解如何使用PHP来实现这些特性,比如通过动态内容生成、社交网络API的集成等。 3. **数据库交互**:在Web 2.0应用中,数据存储和检索是...

    PHP.Web.2.0开发实战 随书源码chapter-03

    还可能包含数据库交互的代码,比如使用MySQLi或PDO_MySQL库进行数据库连接、查询、插入和更新操作,这是Web 2.0应用中常见的功能。 在Web 2.0的框架下,Ajax技术也是重要的知识点。书中可能讲解了如何使用...

Global site tag (gtag.js) - Google Analytics