Spring框架是主要的开源应用程序开发框架,它使得Java/J2EE开发更容易、效率更高。本书不仅向读者展示了Spring能做什么,而且揭示了Spring完成这些功能的原理,解释其功能和动机,以帮助读者使用该框架的所有部分来开发成功的应用程序。
本书涵盖Spring的所有特性,并且演示了如何将其构成一个连贯的整体,帮助读者理解Spring方法的基本原理、何时使用Spring以及如何效仿最佳实践。所有这些都以完整的样本应用程序来举例说明。读完本书,读者将能够有效地在各种应用中(从简单的Web应用程序到复杂的企业级应用程序)使用Spring。
本书主要内容:
●控制反转的核心容器以及依赖注入的概念
●Spring的面向方面编程(AOP)框架以及AOP在J2EE开发中的重要性
●如何有效地使用Spring的编程式和声明式事务管理服务
●使用Spring的JDBC功能性、iBATIS SQL
●Maps、Hibernate和其他O/R映射框架访问数据的方式
●访问和实现EJB的Spring服务
相关图书列表:
●Java 2入门经典:JDK5 书号:7-111-18089-5 定价:118.00元
●Java编程思想(第3版) 书号:7-111-16220-X 定价:95.00元(1CD)
●Java 2核心技术 卷Ⅰ:基础知识(原书第7版) 书号:7-111-18523-4 定价:88.00元
●Java 2核心技术 卷Ⅱ:高级特性(原书第7版)书号:7-111-17901-3 定价:108.00元
●Eclipse精粹 书号:7-111-18273-1 定价:28.00元
无
Spring框架是一个主要的开源应用程序开发框架,它可以使Java/J2EE开发变得更容易,效率更高。
Spring提供的服务可用于各种环境,从applet和独立客户端到运行于简单servlet引擎中的Web应用程序,再到运行于完全成熟的J2EE应用程序服务器中的复杂的企业级应用程序。Spring给出了一个POJO编程模型,把代码与其环境分离开来,在遇到变化时抵御风险。Spring运行于JDK 13及其更高版本,如果有JDK 14和15的话,则能够充分利用它们的特性。Spring的J2EE服务运行在J2EE 12及更高版本之上。
本书将指导读者如何使用Spring框架的所有主要部分来帮助开发成功的应用程序。你不仅会学到Spring能够做什么,而且还会知道Spring框架完成这些功能的原理。读者在使用该框架的时候,不仅会获得最佳实践,而且会看到一个完整的样本应用程序示例。
本书的读者对象
本书是写给想要深入学习Spring框架的Java/J2EE体系结构设计人员和开发人员的,可帮助他们将Spring框架有效地应用于从简单的Web应用程序到复杂的企业级应用程序。
如果你是Spring新手,仍然能够读完本书。但是,书中关于高级主题的讨论对有经验的Spring用户如何有效地使用Spring会更有帮助,在使用Spring开发应用程序的时候,或许应该把本书摆在桌上,以备随时参考。
本书的目标
本书覆盖了Spring框架的所有主要部分,解释框架的功能和实现这些功能的原因,旨在训练读者使用Spring框架实现高级应用程序的能力。
本书的内容
本书覆盖了Spring 12的大部分功能集。你将会学到:
■ Spring提供了什么。Spring有很大的特性集:通过这些特性指导,并且演示它们如何形成一个统一的整体。
■ Spring实现这些特性的原因。讨论了许多Spring特性背后的动机,以及Spring方法的基本原理。
■ 何时使用Spring的特性,以及使用Spring的最佳实践。
我们讨论了Spring的下列领域,并提供了把Spring功能加入到上下文中所需的背景。
■ 作为基础核心的控制反转容器和依赖注入(Dependency Injection)的概念。Spring的轻量级容器(lightweight container)提供了完善的配置管理,以及能够支持其他服务的灵活构架。
■ Spring的面向方面编程(AspectOriented Programming,AOP)框架和为什么AOP在J2EE开发中十分重要。连同Spring的依赖注入能力一起,Spring AOP提供了一个POJO编程模型,其中的应用程序代码对Spring API的依赖最小,即使在它享受Spring服务的时候。
■ Spring是如何对J2EE服务进行抽象的及其达成的目标。
■ 事务管理。包括核心概念、Spring的编程化和声明性事务管理服务,以及如何有效地使用它们。
■ 使用Spring的数据访问。将会看到Spring如何在各种常用的数据访问技术之上提供完善的、一致的抽象;将详细了解如何使用Spring的JDBC功能、iBATIS SQL Maps和Hibernate O/R映射框架来访问数据;将在概念上牢固理解Spring的数据访问,它可用于其他支持的持久性API,比如TopLink。
■ Spring的MVC Web框架。书中有3章内容是:关于Spring MVC框架动机的深入信息;如何与其他常用的Web应用程序框架(比如Struts)比较;如何将其用于从基本的到高级的情形中;以及如何使用Spring MVC来生成定制的内容类型。
■ 用于揭示和访问远程服务的Spring服务。Spring提供了独特的远程处理框架,可运行于各种协议之上,但是完全是基于POJO模型的。
■ 用于访问和实现EJB的Spring服务。
■ 与JMS有关的Spring服务。
■ Spring与开源的Quartz调度器以及其他常用的开源和商用软件的集成。
■ 通过样本应用程序,了解如何在完整的应用程序的设计和实现中使用Spring。
■ Spring应用程序的有效的测试策略。完善的依赖注入容器的主要优点是它可以有效地对应用程序代码进行单元测试;通过提供强大的、同样不需要容器的集成测试功能,Spring又向前进了一步,极大地加快了开发—测试周期的速度。
贯穿全书,我们都讨论了最佳实践。像Spring这样完善的框架,必然允许用多个方法来实现同一个目的;关于哪种方法最优,我们会尝试提供指导。
我们还将帮助读者理解Spring如何提供一个清晰的、分层的体系结构的基础,以及如何适当地使用Spring来促进好的OO设计和体系结构实践。
预备知识
本书读者应该具有核心功能(比如JDBC)的工作知识。与J2EE主题(比如EJB和JMS)相关的章节应该具备这些领域的基础。不过,我们在适当的位置提供了进一步阅读的建议,因此如果不能确定你的知识是否够用,现在也不必太担心。
我们假设读者具有OO设计和Java语言功能方面的牢固知识,包括反射、内部类和动态代理。
现有的Spring框架知识是不需要的。
我们假设读者具有SQL和关系型数据库概念的基本知识。
理解对象关系映射(object relational mapping,ORM)是有帮助的,但并非必要。
如果读者已经用过MVC Web框架,比如Struts,读者或许会更快地领会Web内容。不过,本书是以MVC Web框架的概念来展开对Spring MVC的讨论。
推荐读物
贯穿本书始终的是,我们都推荐了更进一步的阅读资料,以帮助读者更深入领会一些对于Spring开发很重要的概念,比如面向方面的编程(AspectOriented programming,AOP)。
阅读《J2EE without EJB》(Johnson/Hoeller,Wrox,2004)一书是有帮助的,该书详细讨论了轻量级容器(比如Spring)的体系结构的基本原理。但是,本书不完全是那本书的续集,其本身是完全可以理解的。
有许多在线的Spring框架资源。下列资源一定对读者特别有帮助。
■ Spring主页(wwwspringframeworkorg)是大部分Spring相关信息的入口,包括参考文档,提供下载服务。
■ Spring论坛(forumspringframeworkorg)是咨询Spring问题的地方。Spring社区通常是非常热情和善于提供帮助的。
使用本书的前提
为了运行样本应用程序和例子,需要:
■ Spring框架12版或者更高版本。
■ J2EE Web容器或/和应用程序服务器。在只需要Web容器的地方我们使用Tomcat 5,而在需要应用程序服务器的地方使用的是WebLogic 81。但是,Spring是为应用程序服务器之间的可移植性而设计的,我们还在其他产品上测试了代码。因此,不需要使用任何特定的服务器产品,而是使用你最熟悉和最舒服的任何产品。
■ 关系型数据库和适当的JDBC驱动程序。读者应该能够相当容易地修改DDL,使其与你选择的数据库合作。
■ Hibernate O/R映射框架30 版,可以从wwwhibernateorg得到。
■ 各种第三方库,包括Jakarta Commons Logging。必要的JAR文件已经包括在完整的Spring版本中;参见Spring的文档以了解其细节。
■ 完美地与IDE集成的JUnit测试工具。
■ 常用的Jakarta Ant组建工具。
所有这些软件对开发者使用都是开源的或者免费的。
我们建议使用具有重构的良好的Java IDE,比如Eclipse或者IntelliJ IDEA。这样的工具或者与提供编码辅助的有效的XML编辑器一起发布,或者可以很容易地与之集成。在编辑Spring XML Bean定义文档和其他XML产物(比如Hibernate映射文件、iBATIS SQL Maps定义文件和J2EE部署描述符)时,这是很有帮助的,应该不再需要完全手工编辑XML内容。
样本应用程序
本书的样本应用程序是一个在线票务应用程序——与关系型数据库一起工作的Web应用程序。该应用程序使用JSP生成Web内容;使用Spring的MVC Web框架实现Web层;使用Spring来配置中间层对象,并且使它们成为事务性的;以及混合使用Hibernate和JDBC来访问和更新关系型数据。我们使用Spring的数据访问抽象把Hibernate的使用隐藏在数据访问接口的可移植层后面。我们已经用选择的常用关系型数据库(包括MySQL和Oracle)进行了测试。
该应用程序可以运行在Web容器或者应用程序服务器上,使用局部或者全局事务管理。
附录A中讨论了样本应用程序的需求;第15章讨论了其实现。
该问题域首先用于《Expert OneonOne J2EE Design and Development》一书的样本应用程序。本书中已经重写了该应用程序,使其符合目前的Spring功能集以及使用Spring的J2EE应用程序的最佳实践上的目前观点。如果读者有先前那本书,会发现有趣的对照。过去的两三年内,Java框架领域已经有了很大进展,因此最佳实践也发生了巨大变化(不仅仅涉及Spring本身)。
排版约定
为了让读者获得最佳阅读效果,本书对文字编排做了一些约定。
当前讨论的技巧、提示、诀窍和旁白是缩进的,并且使用楷体字。
关于文本的风格:
■ 当介绍重要术语时,使用楷体字。
■ 当表示组合按键时,用Ctrl+A的方式表示键盘组合。
■ 文中的代码用如下字体:persistence.properties
■ 我们用两种方式给出了代码:
在代码例子中,我们用灰色阴影突出显示新的代码和重要的代码段。没有使用灰色阴影突出显示的代码段表示在当前上下文中是不太重要的,或者已经在前面显示过。
源代码
在使用本书中的示例时,读者可以手工输入所有代码,也可直接使用本书附带的源代码文件。本书中使用的所有源代码都可以在wwwwroxcom下载。一旦登录该网站,只需查找本书书名(通过使用Search框,或者使用书名列表),并且单击详细内容中的下载代码(Download Code)链接,即可得到本书的所有源代码。
由于许多书的书名与本书雷同,最快捷的方法是利用ISBN搜索,本书(这里指本书英文版——编辑注)的ISBN是0764574833。
一旦下载了这些代码,读者只需使用最习惯的压缩工具解压即可。此外,读者还可以访问Wrox网站代码下载网页(wwwwroxcom/dynamic/books/downloadaspx)或者华章网站(wwwhzbookcom),可以得到本书的相关源代码。
勘误
尽管我们竭尽所能力争在文字和代码中不出现错误。但是,人非圣贤,错误在所难免。如果读者在书中发现了错误(比如拼写错误或者错误的代码),希望能及时反馈给我们,从而可以让更多的读者在遇到同样的错误时不会耗费太多时间,同时也有利于提高图书质量。对此我们深表谢意。
要查看勘误页面,请先登录wwwwroxcom,使用Search框或者书名列表找到本书书名。然后,在本书的details页面上,单击Book Errata按钮。在该页上,可以看到本书已经提交的,以及由Wrox编辑张贴的所有勘误,包括每本书勘误链接的完整书籍列表也可以在wwwwroxcom/miscpages/booklistshtml上找到。
如果不想把“你的”错误放到Book Errata页面上,可以到wwwwroxcom/contact/techsupportshtml网页,填写那里的表单,把你找到的错误发送给我们。我们将检查该信息,如果正确的话,把消息张贴到本书的勘误页面,并且在本书的后续版本中修改这个错误。
p2pwroxcom
若想与作者和其他读者讨论有关技术问题,可加入P2P论坛(p2pwroxcom)。该论坛是一个基于Web的系统,读者可就Wrox书籍相关的消息和相关技术发表自己的见解,也可与其他读者和技术人员进行交流。该论坛提供了邮件订阅功能,读者可选择感兴趣的话题,如果论坛中新发布了相关消息,会通过电子邮件把这些发送给你。Wrox图书的作者、编辑、其他业界专家以及你的同类读者都会出现在这些论坛上。
在http://p2pwroxcom上,可以找到许多不同的论坛。这些论坛不仅可在阅读本书时帮助你,而且在开发你自己的应用程序时也会有所帮助。加入这些论坛,只要如下这些步骤:
1)登录p2pwroxcom,并且单击Register按钮。
2)阅读使用条款,并且单击Agree按钮。
3)填写加入论坛必需的个人信息,选填愿意公布的可选信息,然后单击Submit按钮。
4)你的Email信箱中将收到一封确认函,按照上面的要求确认注册即可完成加入过程。
阅读论坛中的内容不用注册,但是发布内容则必须注册。
一旦注册成功,读者即可发表自己的帖子或者对其他发帖人回帖。可以随时在Web上阅读消息。如果想把某个特定论坛的新消息发送到你的邮箱,可按照论坛列表中的论坛名字,单击该论坛图标上的Subscribe。
关于如何使用Wrox P2P的更多信息,请阅读P2P FAQ,以了解关于论坛软件如何使用的问题的解答,以及P2P和Wrox书籍特定的许多常见问题。要阅读FAQ,可单击任何P2P上的FAQ链接。
作者简介
Rod Johnson是Spring框架的创始人,并且是Java和J2EE领域的著名专家。
Rod获悉尼大学博士学位。他具有C/C++开发背景,从Java和J2EE发布以来就作为开发者、体系结构设计者和顾问涉足了Java和J2EE领域。
他撰写了两本最普及并最有影响力的J2EE书籍:《Expert OneonOne J2EE Design and Development》(Wrox,2002),和《J2EE without EJB》(Wrox,2004,与Juergen Hoeller合著)。这两本书在“敏捷”J2EE的兴起和改变过度复杂的传统J2EE体系结构方面都起了重要作用。
Rod是Spring框架的共同领导之一。他的发言很受欢迎,并且经常出现在美国、欧洲和亚洲举行的Java重要活动中。他是一些JSR的专家组的成员,为Java社区发展计划(Java Community Process,JCP)服务。
他还具有在银行和金融、保险、软件、媒体等领域从事顾问的广泛经验。他是Interface21(www interface21 com)的CEO,Interface21是一家致力于提供专家级J2EE和Spring框架服务的咨询公司。他积极参与客户项目和Spring开发。
献给Kerry。
Juergen Hoeller是Interface21的共同创始人,该公司从源头提供商业性Spring服务。他是Spring开发的主要驱动者,并且从Spring一发布开始就担任其发布经理。在该项目中,他负责多方面的开发内容,从核心容器到事务管理、数据访问和轻量级远程处理。
Juergen获林茨大学计算机科学硕士学位,专攻Java、OO建模和软件工程。他是《Expert OneonOne J2EE Development without EJB》(Wiley,2004)一书的合著者,并且经常参加各种会议和活动。他还活跃于许多社区论坛中,其中包括TheServerSide。
致Eva,感谢她始终如一的关爱和支持,感谢她理解在Spring世界中没有工作时间和休闲时间之分。
Alef Arendsen就读于乌得勒支大学,学习计算机科学。随后,也是在乌得勒支,Alef创办了他的第一家公司。后来发现公司没有挑战性,Alef转而就职于SmartHaven(一家总部设在阿姆斯特丹的风险投资公司),为知识管理应用程序提供J2EE组件。他负责使开发过程合理化和部分组件基础设施的设计。2002年初,Alef和Joost van de Wijgerd一起创立了提供J2EE开发服务的软件公司JTeam。作为Spring的核心人物之一,Alef现在是Interface21的顾问,与此同时,他继续参与JTeam的工作。他频繁地在各种公众大会发言。读者可以通过电子邮件alef@interface21.com和他联系,还可以在http://blogarendsennet上阅读他的博客。
致Mas,我的侄子,他时常逗我开心,并且使我想起工作之外还有其他事情。
Thomas Risberg是就职于TargetrRx的数据库开发人员。TargetrRx是一家药物市场研究公司,位于宾夕法尼亚州的Horsham。他有多年与大型和小型组织一起开发各种数据库相关项目的经验,从简单的数据登录程序到大型的数据仓库实现都有。Thomas是有创新精神的COBOL程序员,经由Xbase、Visual Basic和PL/SQL转到了Java。他做了几年的Oracle DBA,但是最终认识到软件开发才真正是他的心之所在。
Thomas持有瑞典的斯德哥尔摩大学信息处理专业的学士学位。他是认证的Oracle专业DBA,以及Sun认证的Java程序员和J2EE体系结构设计者。
Thomas 2003年初加入Spring框架开发团队,主要参与JDBC层的开发。除计算机以外,他的兴趣是足球、摄影和旅行。
Colin Sampaleanu有几乎长达20年的丰富多彩的职业生涯(在孩童时期鼓捣计算机和软件之后)。其经历包括管理他自己的零售软件公司并为它从事开发;C++ shrinkwrap和企业软件空间工作的若干年,从Java语言开发早期就开始使用Java,从20世纪90年代后期完全专注于企业级Java等。
Colin现在是Interface21的一个主要合伙人。Interface21专门从事Spring的培训、咨询和支持。在加入Interface21之前,Colin是一家软件孵化器/VC的首席体系结构设计人员。
作为核心的Spring开发者和Interface21负责人,Colin花费大量时间来讲述和撰写文章说明Spring的好处,以及推广敏捷软件开发的体系结构和方法。
致Nina,感谢她对我始终如一的关爱和支持,感谢她理解如下事实:不管我们的主观意愿多么好,在这个业界,朝九晚五通常只不过是一个工作日的上半天。致Alec和Maia,感谢他们的率真和快乐,是他们让我想到生命中除了计算机以外还有其他的事情。
致谢
Rod Johnson在本书写作过程中,许多人提供了帮助。我尤其要感谢我的合著者,他们每个人都扮演了重要角色,从而确保我们的书能够覆盖Spring的各个方面。
感谢Spring的Acegi Security的首席开发者Ben Alex,他贡献了Spring安全方面的大部分素材。Mark Pollack是Spring开发者和SpringNET的领导,也承蒙他贡献了与Spring JMS服务有关的素材。Dmitriy Kopylenko,也是一位Spring开发者,他帮助完成了AOP一章的图表和范例。
最后,感谢评审们(特别是Peter den Haan和Aleksander Seovic)对细节的关注并提出了许多宝贵的建议。
Juergen Hoeller我感谢我的合著者、我们的评审以及我们的编辑;与你们一起工作是一件乐事。Peter den Haan对各章的评阅非常仔细,对他要特别说一声谢谢。最后,我向整个Spring社区致以我的谢意:没有你们的积极参与,Spring项目就不会有今天。
A. Arendsen我感谢JTeam所有同事的支持。特别感谢Bram Smeets和Arjen Poutsma为各种主题提供了宝贵的内容。我还非常感谢Joost,就是他最初和我一起创办了JTeam。没有他,我无法挤出时间撰写本书。我还要向Goof Kerling表达我的谢意,他教给我编程的知识和正确编程的方法,教我去理解和感悟生活,这一切使我获益良多。感谢Lars每个月为我做一次饭,提供一个地方让我待到我的房子完工,并且偶尔和我一起喝啤酒。我也感谢我家人的支持,感谢技术编辑对内容的全面审核以及指出荷兰语不是世界上使用最广泛的语言。
Thomas Risberg我感谢整个Spring社区——没有你们,Spring项目和本书都不会有今天。
Colin Sampaleanu我感谢我的合著者、Interface21的搭档和Spring团队为工作立下了如此高的标准。与你们一起工作永远是一件乐事。我感谢多年以来的许多同事,他们对软件开发艺术的热情帮助我也保持高度的兴趣。我还要感谢我的技术评审Peter den Haan、Qi Zhang和Jim Leask,他们提供了非常宝贵的反馈意见。
Rod Johnson, Juergen Hoeller, Alef Arendsen, Thomas Risberg, Colin Sampaleanu:暂无简介
蒋培:暂无简介
Spring作为从Rod Johnson所著的《Expert OneonOne J2EE Design and Development》一书成功进化而来的J2EE开发框架,从一开始就保持了一致的体系结构和编程模型,在其发布后的一年多时间里,迅速成为各种Java/J2EE论坛中频繁讨论的话题,也被广泛应用到各种大小项目中,成为J2EE开发框架中的新宠。
本书可以称为上一本书的续集,其概念、内容、示例等方面都具有一定的延续性。本书尽管没有像Rod Johnson另外两本畅销的J2EE书籍——《Expert OneonOne J2EE Design and Development》和《J2EE without EJB》中那样安排了那么多理论分析和讨论,但是更加针对Spring的实际开发指导,提供了详尽的案例和代码。随着Spring的普及,市面上已经有了很多关于Spring的书籍,不过人们一直期待一本全面而深入覆盖Spring所有部分的开发指南,现在终于盼到了,本书就是!
当然,本书绝不仅仅是一本开发指南,它详细解释了Spring体系结构的内部机制和实现过程,让读者不仅知其然,而且知其所以然。它对Spring引以为傲的控制反转和依赖注入概念进行了深入剖析,分别用简单、实用的例子讲述了不同形式的注入方式,比如设置器注入、构造函数注入和方法注入。本书还详细讲解了Spring的AOP框架,用大量代码和图示深入浅出地叙述了AOP框架中的各种概念及其应用,以及如何与其他AOP框架进行集成。另外,针对Spring鼎足而立的“第三足”——一致性服务抽象,本书也花费了大量篇幅予以叙述。当然,除了这些之外,本书还阐述了许多在其他Spring著作中未曾出现或者语焉不详的内容,包括JDBC框架、事务与资源管理、O/R映射、Web MVC框架和Acegi Security系统等。本书不仅突出了Spring框架的重点,还涵盖了在Spring框架开发中所涉及的各个方面。尤为可贵的是,本书使用了一个完整的、接近于实际应用的样本应用程序贯穿全书始终,使读者在了解和学习Spring基本概念的过程中能够切实感受到实际开发的要求和注意事项,增加读者的实战经验。对于Spring开发人员,本书是他们不可多得的案头参考书。建议读者在阅读本书时,先浏览一下前言的内容或许能够更好地理解书中所使用的例子。
Rod Johnson由于其所著的《Expert OneonOne J2EE Design and Development》和《J2EE without EJB》这两本书而在Java/J2EE业界名声大噪。在这些书中,他大胆质疑甚至挑战传统的J2EE开发模式,积极倡导轻量级框架,引领敏捷软件开发潮流。其实,Rod Johnson不仅是一位高素质的Java书籍的作者,还是一位音乐学博士;不仅领先开发了Spring框架,还创建了Interface21公司,负责Spring框架的推广、培训和咨询。本次更是亲率Spring框架的核心开发团队,倾力撰写了这本Spring框架的开发宝典。
作为译者,本人首先感谢机械工业出版社华章分社出版这本高质量技术书籍的中文版,本书的英文版在Amazon网站获得的好评如潮,被读者评为四星半,表明了读者对该书的认可。还要感谢各位编审人员,是他们一丝不苟和兢兢业业的工作才保证了本书的出版质量。最后,对蒋坚松教授在翻译过程所给予的悉心指导,以及吴辉老师对译稿的编辑和审阅一并表示感谢。
由于时间紧迫,并限于译者水平,书中难免有疏漏之处,望各位读者和专家批评指正。
蒋培
于上海
第1章Spring框架概述1
11为什么要Spring1
111J2EE传统方式的问题1
112轻量级框架3
113进入Spring3
12Spring的价值4
13上下文中的Spring6
131技术6
132技巧12
133与其他框架的关系13
14使用Spring构造应用程序15
141结构层次图15
142持久性和集成17
143业务服务对象19
144表示19
15前景21
151发布日程21
152Java和J2EE的进展21
153技术趋势22
154标准与源码公开22
16Spring项目和社区23
161历史23
162模块摘要24
163支持的环境26
17小结27
第2章Bean工厂与应用程序上下文28
21控制反转和依赖注入28
211不同形式的依赖注入31
212在设置器注入和构造函数注入之间决定33
22容器34
221Bean工厂34
222应用程序上下文35
223启动容器36
224使用来自工厂的Bean38
225XML Bean配置38
226基本的Bean定义39
227指定Bean的依赖41
228管理Bean生命周期47
229对服务和资源访问的抽象49
2210重用Bean定义53
2211使用后置处理器处理定制的Bean和容器55
23小结60
第3章高级容器概念62
31低层资源的抽象62
311应用程序上下文作为ResourceLoader63
312应用程序上下文作为消息源65
32应用程序事件66
33管理容器68
331ApplicationContext构造函数中的资源位置路径68
332应用程序上下文的声明式用法69
333将容器定义划分到多个文件71
334处理组件的策略72
335用于访问容器的单态74
34一些方便的工厂Bean74
341PropertyPathFactoryBean75
342FieldRetrievingFactoryBean76
343MethodInvokingFactoryBean76
35Spring提供的属性编辑器77
36测试策略77
361单元测试77
362使用Spring容器的测试80
37XML的替代品82
371来自Properties文件的定义82
372编程式Bean定义83
373其他格式83
38参考文献84
39小结84
第4章Spring与AOP85
41目标85
42假设86
43例子86
44Spring的AOP框架89
441拦截器链89
442赞成与反对89
443通知90
444切点94
445通知器(advisor)98
446与Spring IoC容器的集成99
447在运行时间检验并处理代理状态109
448编程式的代理创建109
45使用Spring的AOP框架的高级特性110
451TargetSources110
452及早终止拦截器链115
453使用介绍115
454暴露当前的代理117
455暴露当前的MethodInvocation117
456理解代理类型118
457调试与测试119
458其他121
46与其他AOP框架集成123
461目标123
462集成AspectJ123
463AspectWerkz126
47参考文献127
48小结127
第5章DAO支持与JDBC框架128
51数据访问对象模式128
52Spring的JDBC框架概述129
521起因:直接使用JDBC的问题130
522Spring可以如何帮助131
523简单的例子131
53建立样本应用程序的数据访问层132
531样本应用程序的数据模型132
532DataSource134
533异常转译135
54使用JdbcTemplate的操作137
541回调方法的使用137
542JdbcTemplate的方便方法138
543使用JdbcTemplate的基本查询138
544使用JdbcTemplate的基本更新139
545JdbcTemplate的高级用法140
546对RowSet的支持141
55使用RDBMS操作类142
551SqlQuery和MappingSqlQuery142
552使用SqlUpdate插入和更新144
553使用UpdatableSqlQuery更新ResultSet145
554生成主键146
555检索数据库生成的键147
556调用存储过程148
56高级概念150
561在应用程序服务器中运行Spring JDBC150
562使用定制的异常转译151
563读写LOB数据153
564批量更新158
565存储过程的高级用法159
57其他的考虑事项163
571性能163
572何时使用JDBC和O/R映射163
573JDBC版本和J2EE版本163
58小结164
第6章事务和资源管理165
61背景165
611什么是事务165
612ACID属性165
613并发控制167
62事务与J2EE167
621局部事务167
622全局/分布式事务167
623事务传播168
624事务划分168
63Spring事务支持的例子168
64Spring的事务抽象介绍170
641事务控制选择的概述170
642事务定义171
643事物状态174
644事务划分策略174
645事物管理策略185
65DataSource声明192
651本地非缓冲192
652本地缓冲193
653JNDI193
654在本地DataSource和JNDI DataSource之间选择194
66小结194
第7章对象/关系映射195
71背景知识195
711基本的O/R映射195
712对象查询语言196
713透明持久性196
714何时选择O/R映射197
72Spring中的O/R映射支持197
721数据访问对象198
722事务管理198
73iBATIS SQL Maps199
731映射文件199
732DAO实现201
733在Spring上下文中设置202
734事务管理203
735iBATIS概要204
74Hibernate205
741映射文件205
742DAO实现206
743Spring上下文中的设置209
744事务管理211
745Open Session in View216
746BLOB/CLOB处理218
747Hibernate:小结220
75JDO221
751持久性对象的生命周期221
752DAO实现222
753在Spring上下文中设置223
754事务管理224
755PersistenceManager的生命周期225
756Open PersistenceManager in View226
757JDO方言227
758JDO:小结228
76其他O/R映射工具229
761Apache OJB229
762TopLink230
763Cayenne231
764JSR220持久性231
77小结231
第8章轻量级远程处理233
81概念和范围233
82一般的配置风格234
83Hessian和Burlap235
831访问一个服务236
832导出一个服务238
84HTTP调用器239
841访问一个服务239
842导出一个服务240
843定制化选项241
85RMI242
851访问一个服务243
852Stub查询策略244
853导出一个服务246
854定制化选项246
855RMIIIOP247
86通过JAXRPC的Web服务247
861访问一个服务248
862导出一个服务250
863定制的类型映射252
87小结253
第9章支持性服务255
91JMS255
911引言255
912Spring的JMS支持的起因256
913通过模板的JMS访问257
914异常处理258
915ConnectionFactory管理259
916消息转换器259
917目的管理260
918事务管理261
919JmsGatewaySupport261
9110前景263
92使用Spring的调度263
921Timer与Quartz263
922Timer263
923Quartz265
93使用Spring发送电子邮件269
931入门指南270
932重用现有的邮件会话271
933使用COS的邮件发送271
934通用的邮件管理器271
94脚本275
941一致性模型275
942其他脚本语言278
95小结279
第10章Spring的Acegi Security系统280
101企业级应用程序的安全选择280
1011典型的需求280
1012Acegi Security简介281
1013Java身份验证和授权服务284
1014Servlet规范286
102Acegi Security的基础287
1021身份验证287
1022存储身份验证对象290
1023授权292
1024域对象实例的安全292
103范例代码295
1031范例介绍295
1032安全所不知道的实现295
1033安全方法298
1034身份验证298
1035授权299
104小结302
第11章Spring与EJB303
111对EJB的需要做出决断303
112访问EJB304
1121样板方法304
1122Spring的方法305
113用Spring实现EJB310
1131无状态会话Bean310
1132有状态会话Bean313
1133消息驱动的Bean314
1134几句题外话:谈谈XDoclet315
114单态容器访问,是好还是坏315
1141ContextSingletonBeanFactoryLocator和SingletonBean FactoryLocator316
1142共享的上下文作为Web应用程序的应用程序上下文的双亲318
1143使用来自EJB的共享的上下文321
115测试关注点321
1151在POJO委托中实现业务功能321
1152使用模仿的EJB容器321
1153应用程序服务器内部的集成测试322
116小结323
第12章Web MVC框架324
121简单的例子324
122一般的体系结构326
1221Web MVC概念326
1222使用分发器和控制器的通用Web MVC327
1223好的Web MVC框架的需求327
1224Spring的Web MVC的等价物328
123基础设施组件330
1231DispatcherServlet330
1232WebApplicationContext333
124处理请求有关的工作流334
125Spring MVC Web应用程序的一般布局336
126HandlerMapping337
1261BeanNameUrlHandlerMapping338
1262SimpleUrlHandlerMapping338
1263CommonsPathMapUrlHandlerMapping339
1264多个HandlerMapping340
127HandlerExecutionChain和拦截器341
1271WebContentInterceptor342
1272UserRoleAuthorization Interceptor343
1273Spring MVC提供的其他处理器拦截器343
128处理器及其适配器343
129ModelAndView和ViewResolvers343
1291UrlBasedViewResolver344
1292BeanNameViewResolver和XmlViewResolver344
1293ResourceBundleViewResolver345
1294视图解析器链接345
1210地区值的改变和解析347
1211HandlerExceptionResolvers348
1212控制器350
12121WebContentGenerator350
12122AbstractController350
12123UrlFilenameViewController351
12124ParameterizableView Controller351
12125MultiActionController352
1213数据绑定352
1214使用控制器的实际例子354
12141使用AbstractController查看演出列表354
12142预订356
1215向导功能362
12151基本配置362
12152模板方法363
12153向导流程363
12154页面改变、编号和其他动作363
1216扩展Spring处理器的基础设施365
1217上传文件365
12171配置多部分解析器365
12172创建表单来上传文件366
12173处理上传的数据366
1218测试控制器367
12181无须应用程序上下文的测试368
12182使用模仿对象的更广泛测试369
12183使用完全的应用程序上下文测试370
12184测试Web应用程序的其他方法370
1219小结371
第13章Web视图技术372
131一个例子372
1311通用配置373
1312JSP373
1313FreeMarker373
1314使用iText生成PDF374
132选择技术时的注意事项375
133视图对象和模型375
134AbstractView提供的特性376
1341使用RedirectView发布新的请求377
1342使用视图前缀发布转向或者重定向378
135JSP379
1351配置应用程序以使用JSP379
1352使用定制标记创建表单380
1353使用标记文件创建可重用的元素385
136Velocity和FreeMarker385
1361配置视图解析器386
1362使用表单简化宏388
137Tiles390
138基于XML和XSLT的视图393
139Excel和基于其他文档的视图394
1391从表演列表生成Excel文件394
1392以模板作为Excel文件的基础395
1393基于其他文档的视图396
1394使用HandlerInterceptor区分HTML和Excel396
1310实现定制视图398
13101View和AbstractView398
13102实现从数据对象生成XML的视图398
13103实现定制视图时的注意事项400
1311小结400
第14章与其他Web框架集成401
141选择MVC框架时的注意事项401 比较传统的Web MVC框架401
142与Spring集成:核心概念408
143WebWork 集成410 设置ObjectFactory410
144Struts集成411
1441使用ActionSupport412
1442使用DelegationRequestProcessor和DelegationActionProxy413
1443使用自动装配的基本动作415
145Tapestry集成416
1451为Tapestry准备Bean416
1452页面类417
1453页面定义417
1454页面模板418
1455Tapestry集成的最终思考420
146JSF集成420
147小结421
第15章样本应用程序422
151服务器技术的选择422
152应用层422
153持久性层423
1531数据模型423
1532域对象模型425
1533对象/关系映射426
1534DAO实现429
1535数据访问上下文430
154业务服务层431
1541服务431
1542应用程序上下文432
155Web层433
1551应用程序流程434
1552通过webxml配置应用程序434
1553Web控制器435
1554视图技术437
156与J2EE设计和开发实现的比较438
1561更简单的技术438
1562数据库变化438
157服务器配置439
1571MySQL439
1572Tomcat439
158构建和部署440
1581创建和载入数据库表440
1582构建应用程序并部署到Tomcat服务器440
159小结440
第16章结论441
161Spring解决的问题441
162Spring解决方案441
163Spring开发的指导方针443
1631技术选择443
1632层与层444
1633构造应用程序448
1634测试应用程序451
164相关项目452
1641Spring的Acegi Security452
1642其他项目452
165非J2EE环境中的Spring453
166发现更多454
1661书籍和文章454
1662在线资源454
1663样本应用程序454
167前景455
附录A样本应用程序的需求457
A1概述457
A2用户群体457
A21公众Internet用户457
A22售票处用户458
A23系统管理员458
A3假设458
A4范围限制459
A5交付时间表459
A6Internet用户界面459
A61基本工作流459
A62错误处理460
A63应用程序屏幕460
A7非功能性需求469
A8硬件和软件环境470