首页>参考读物>计算机科学与技术>软件与程序设计

Spring技术内幕——深入解析Spring架构与设计原理
作者 : 计文柯 著
出版日期 : 2009-12-11
ISBN : 978-7-111-28806-0
定价 : 55.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 312
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书由业界拥有10余年开发经验的资深Java专家亲自执笔,权威性毋庸置疑。全书以介绍Spring的基础架构和源代码实现结构开篇,不仅深入透彻地剖析了Spring IOC和Spring AOP等核心功能和Spring MVC、Spring JDBC、Spring ORM等核心组件的实现过程,而且还深入剖析了Spring安全框架Acegi和著名Spring实例Petclinic的实现过程。
通过本书,读者不仅能全面了解Spring框架的优秀架构和设计思想,而且还能从Spring优雅的实现源码中一窥Java开发的精髓。无论读者是一般的Java极其相关技术开发者,还是Spring应用开发者,抑或是平台开发人员和架构师,都能从本书中受益。

图书特色

作者从业10余载,悟透Spring等开源软件的本质,权威性毋庸置疑。
Java开发者社区、专业Spring开发者社区和架构师社区一致鼎力推荐!
深入解析Spring架构原理与设计思想,探究Spring成功的奥秘。
揭开Spring源代码的神秘面纱,展示系统阅读开源软件源代码的方法和秘诀。

掌握Spring的架构原理与设计思想真的能让开发者如虎添翼吗?
IoC容器如何掌控以POJO为基础的Bean对象?它的轻量级开发设计思想是如何实现的?
Spring产品级的IoC容器是如何作为一个完整的系统实现并运行的?它如何启动?如何完成Bean的解析和载入?又如何实现Bean的生命周期管理?
Spring如何简捷地在JVM上实现AOP功能?
Spring AOP如何实现Aspect编织功能?
Spring如何实现各种数据库操作组件的集成?
Spring如何在Web环境中集成IoC容器并为Web应用开发提供利器?
我们耳熟能详的MVC模式在Spring中是如何实现的?
Spring MVC如何灵活地集成各种丰富的视图展现方案?
Spring实现远端调用的方案有很多种,你知道它们之间的优劣差异吗?
Spring ACEGI安全框架在用户验证和授权机制的实现上有何过人之处?
如何在Spring的基础上进行扩展开发?
你是否曾经也有过分析开源软件源代码的冲动?你想掌握分析源代码的最佳实践吗?
······
计文柯 资深软件开发专家和项目经理,拥有10余年开发经验,对Spring等开源软件的应用和实现原理有深入研究和独到见解。产品研发和项目管理经验丰富,曾任职于华为技术、摩托罗拉等知名企业和硅谷移动互联网创业公司,在软件工程和项目管理方面积累了大量最佳实践。现在正在学习云计算,准备迎接即将爆发的计算革命。闲暇之余,他非常享受历史书籍带给他的快乐!

图书前言

作为Java领域中最为成功的开源软件之一,Spring在Java开发中,有不可替代的作用和地位。本书以Spring的源代码为依托,从内部实现的角度,对Spring的设计原理、架构和运行机制进行了翔实的分析。
  忽如一夜春风来,伴随着Rod Johnson的Expert One-on-One J2EE Design and Development(2002年)一书的出版而正式发布的Spring框架(也就是当年的interface21),经过这几年的发展,已经逐渐成熟起来。吹面不寒杨柳风,Spring带来的崭新开发理念,也早已伴随着它的广泛应用而飞入寻常百姓家。
  与此同时,随着Spring的不断成熟和完善,开源社区的成长,以及Rod Johnson的得力领导,以Spring为核心的一系列开源软件产品也越来越丰富,现已发展成为一个包括软件构建、开发、运行、部署整个软件生命周期的产品族群。Spring不但改变了Java EE应用的开发和服务模式,向纯商业软件发起了强有力的挑战,而且已成为Java软件生态链中不可或缺的重要组成部分。它所具备的那种平易近人,但却内涵丰富的品质,对我们这些软件爱好者来说,实在是一个不可多得的学习范本。
  简化Java企业级应用开发是Spring框架的目标。其轻量级的开发思想,为开发者提供便利的出发点(for the developer, to the developer and by the developer—这是Rod Johnson在一次演讲中的开场白),以及具有活力的开源社区,所有的这些,都为使用Java开发企业应用和Web应用带来了福音。
  在Java企业应用中,与我们熟悉的企业应用服务器一样,Spring也希望能够集成管理企业应用资源,以及为应用开发提供平台支持。在这一点上,Spring与UNIX和Windows等传统意义上的操作系统在计算系统中起到的作用是类似的。不同点在于,传统操作系统关心的是存储、计算、通信、外围设备等这些物理资源的管理,并在管理这些资源的基础上为应用程序提供一个统一平台和服务接口;而Spring关心的是如何为开发者集中管理在Java企业应用和Web应用中涉及的数据持久化、事务处理、消息中间件、分布式计算等抽象资源,并在此基础上为应用提供了一个基于POJO的开发环境。尽管二者面向的资源、管理的对象、支持的应用,以及使用的场景不同,但它们在整个计算系统中的定位,却有着可以类比和相互参考之处。所以,笔者根据对传统操作系统的认识方法,粗浅地把对Spring框架的实现划分为核心、组件和应用这三个基本层次,通过对这三个层次中的一些主要特性的实现来剖析Spring的工作原理和运作机制。同时,也把这样的认识逻辑用来组织本书中需要阐述的内容。
  在这样的层次划分中,首先看到的是对IoC容器和AOP这两个核心模块的工作原理的分析,它们都是Spring平台实现的核心部分;同时,它们也是Spring的其他模块实现的基础。虽然大多数开发者都只是在此基础上进行相关的配置和使用外部功能,但是深入理解这两个核心模块的工作原理和运作机制对于我们更好地使用Spring进行开发是至关重要的。因为Spring简化Java EE开发是通过对POJO开发提供支持来实现的。Spring通过为基于POJO的开发模式提供支持,从而让应用开发与复杂的Java EE服务实现解耦,并由此通过提高单元测试覆盖率(也就是应用系统的可测试性)来有效地提高Spring应用的开发质量。在这样的开发场景下,需要把为POJO提供支持的各种Java EE服务支持抽象到Spring应用平台中去,并将其封装起来。具体地说,这一系列的封装工作在Spring及其应用实现中离不开IoC容器和AOP这两个核心模块的支持,它们很大程度上体现了Spring作为应用开发平台的核心价值。它们的实现是Rod Johnson在他的另外一本著作Expert One-on-One J2EE Development without EJB中,所提到“Without EJB设计思想”的具体体现,同时,也深刻地体现了Spring背后的设计理念。
  其次,在IoC容器和AOP这两个核心模块的支持下,Spring为了简化Java EE开发,为应用开发提供了许多现成的用户态系统组件,比如事务处理、Web MVC、DBC、O/R映射、远端调用等,通过这些系统组件为企业应用服务的实现提供驱动支持。这些由Spring或者其生态系统(其本身、子项目或者社区)提供的、类似于驱动模块般的系统组件是开发应用时经常会用到的Java EE服务抽象。Spring让用户可以用POJO来开发具体的应用,而这些应用往往需要Java EE服务的有力支撑。通过使用Spring提供的这些类似于驱动组件的中间产品,通过这一层Java EE服务的抽象,用户可以通过使用简单的开发接口或者应用模板很方便地使用各种Java EE服务和灵活地选取提供这些服务的各种不同的具体实现方案。比如,可以在各种第三方开源软件或者商业产品中自由地选择。
  Spring作为一个开源项目,它本身就是一个开放的生态系统。对于与Spring相关的一些项目,可以把它们看作某个领域的用户应用,因为它们与Spring的实现紧密相关;或者,它们本身就作为Spring框架的应用案例,体现了许多使用Spring的技巧。这些都是我们开发应用的理想参考,比如ACEGI安全性框架和petclinic应用案例。一方面,可以把这些实现作为应用的一个基本方案加以裁剪,以满足特定领域的需求;另一方面,通过剖析这些应用,可以为应用开发提供很好的参考,提高开发效率。
  从更深层次的技术层面上来看,因为Spring是基于Java语言的应用平台,如果我们能够对作为Spring的运行环境的Java计算模型(比如JVM的实现原理)有一些了解,将会加深我们对Spring实现原理的理解。反射机制、代理类、字节码技术等这些JVM特性都是在Spring实现中会涉及的一些Java计算环境的底层技术。一般的应用开发人员可能不会直接从事与JVM底层实现相关的工作,但是这些计算环境的底层知识对我们深入理解Spring是不可缺少的。
  在本书的写作过程中,VMware公司收购了Spring的运营者Spring Source。此次商业收购一方面反映了开源软件中蕴含着的巨大商业价值,另一方面反映了Spring的发展趋势:与云计算融合,以及Spring为自己规划的云计算战略—成为PaaS(Platform As a Service)服务的有力竞争者。在云计算这个全新的计算环境中,如何在发挥Spring在企业级应用开发中已经具备的优势的基础上,为云计算应用的开发提供高可靠性、高可用性、高可扩展性和高性能的应用平台,是Spring团队面临的全新挑战。Spring在这个崭新领域的雄心和作为让我们充满好奇和期待,我们拭目以待!
  闲话说了这么多,很多读者可能已经有些迫不及待了,也许只有对Spring的实现身临其境地接触才是真实的,这里太多的文字已经成为一种累赘。本书将带领你到Spring的核心实现这个茂密而又充满生机的源代码丛林中去大胆地探寻和小心地求证。在这里,你会惊奇地发现:这个过程就像是阅读优美的散文或情节跌宕起伏的小说一样,是与开源软件开发者以及开发者社区的一种畅快淋漓的交流和对话,让人如痴如醉。
本书面向的读者
  q 学习Java语言和Java EE技术的中高级开发者
  Spring是使用Java语言实现的,很多功能的源码实现都极其优秀,非常具有研究和参考价值。对这部分读者来说,不仅可以从本书中了解到Spring的实现原理,而且还能通过Spring的源代码,掌握一流的Java编码技巧和Java EE开发技术。
  q Spring应用开发人员
  如果要利用Spring进行高级应用开发,抑或是相关的优化和扩展工作,仅仅掌握Spring的配置和基本使用是远远不够的,必须要对Spring框架的设计思想、架构和运作机制有一定的了解。对这部分读者而言,本书将带领他们全面了解Spring的实现原理,从而加深对Spring框架的理解,提高自己的开发水平。同时,本书可以作为他们定制和扩展Spring框架的参考资料。
  q 开源软件爱好者
  Spring是开源软件中的佼佼者,它在实现的过程中吸收了很多开源领域的优秀思想,同时也有很多值得其他开源软件学习的创新。尤为值得一提的是,本书分析Spring源代码的方式也许值得所有想分析源代码的爱好者们学习和借鉴。通过阅读本书,这部分读者不仅能领略到开源软件的优秀思想,而且还能掌握分析源代码的方法和技巧,从而进一步提高使用开源软件的效率和质量。
  q 平台开发人员和架构师
  前面已经反复强调,Spring的设计思想、架构和实现都非常优秀,是平台开发人员和架构师们不可多得的参考资料。
如何阅读本书
  本书共分为三部分,分别剖析了Spring的核心、组件和经典应用的实现机理。阅读本书时,首先建议读者建立一个源代码阅读环境,这样一方面可以追踪最新的源代码实现,另一方面可以在阅读的过程中进行各种方式的索引和动手验证,加深对开源软件开发方式的体会。
  第1章对如何建立源代码环境做了简要介绍。这些知识不但适用于建立Spring的源代码研究环境,而且还适用于其他的Java开源项目,有一定的普遍性和参考意义。对于不同的项目,其具体使用的源代码管理工具、代码的位置、权限配置会有一些不同,但是整个源代码的获取过程与Spring是类似的。
  第一部分详细分析了IoC容器和AOP的实现,这部分内容是理解Spring平台的基础,适合对Spring的运行机理有深入了解需求的读者阅读。在对AOP实现模块的分析中涉及一些JVM底层技术,这也是读者需要具备的背景知识。
  第二部分深入阐述了基于IoC容器和AOP的Java EE组件在Spring中的实现。在这部分内容中可以看到,每一个组件实现的内容基本上都是相对独立的,读者可以结合自己的应用需求选读。比如,如果对Spring Web MVC的实现原理感兴趣,可以阅读第4章;如果对Spring提供的数据库操作的实现机制感兴趣,可以阅读第5章;如果对Spring提供的统一事务处理的实现感兴趣,可以阅读第6章;如果对Spring提供的各种不同的远端调用实现感兴趣,可以阅读第7章。
  第三部分讲述了一些基于Spring的典型应用的实现。如果读者对在Spring应用中如何满足应用资源的安全性需求方面的内容感兴趣,可以阅读第8章,本章对为Spring应用提供安全服务的ACEGI框架的实现进行了分析,在深入了解这部分内容的基础上,读者可以根据自己的应用需要定制自己的安全系统。如果想了解一般企业应用的典型实现,比如Web MVC层的应用、数据库操作、O/R映射等特性在Spring应用中的具体使用,可以阅读第9章,本章中的petclinic应用为Spring应用开发提供了一个现实的应用实例,虽然简单,但却相对完整。这个应用实例是Spring团队的作品,是Spring项目的一部分。
  读者可登录本书网站(http://www.springagile.cn)进行技术交流。
  由于水平有限,再加上写作时的疏漏,书中难免还会存在许多需要改进之处。在此,欢迎读者朋友们指出书中存在的问题,并提出指导性意见,不甚感谢。如果大家有任何与本书相关的内容需要与我探讨,请申请加入华章俱乐部一并提出你的问题和看法,我会及时给予回复。最后,衷心希望本书能给大家带来帮助,祝大家阅读愉快!

上架指导

计算机科学及应用

封底文字

本书特色
(1)作者从业10余载,悟透Spring等开源软件的本质,权威性毋庸置疑。
(2)Java开发者社区、专业Spring开发者社区和架构师社区一致鼎力推荐!
(3)深入解析Spring架构原理与设计思想,探究Spring成功的奥秘。
(4)揭开Spring源代码的神秘面纱,展示系统阅读开源软件源代码的方法和秘诀。
如果你正在思考下面这些问题,也许本书就是你想要的!
(1)对于开发者而言,掌握Spring的架构原理与设计思想有哪些特殊的意义?
(2)IoC容器如何掌控以POJO为基础的Bean对象?实现轻量级开发设计思想的?
(3)Spring产品级的IoC容器是如何作为一个完整的系统实现并运行的?它如何启动?如何完成Bean的解析和载入?又如何实现Bean的生命周期管理?
(4)Spring如何简捷地在JVM上实现AOP功能?
(5)Spring AOP如何实现Aspect编织功能?
(6)Spring如何实现各种数据库操作组件的集成?
(7)Spring的各种事务处理的设置属性如何在Spring中发挥作用?
(8)Spring如何在Web环境中集成IoC容器并为Web应用开发提供利器?
(9)我们耳熟能详的MVC模式在Spring中是如何实现的?
(10)Spring MVC如何灵活地集成各种丰富的视图展现方案?
(11)Spring实现远端调用的方案有很多种,你知道它们之间的优劣差异吗?
(12)Spring ACEGI安全框架是如何实现用户验证和授权的?
(13)如何在Spring的基础上进行扩展开发?
(14)你是否曾经也有过分析开源软件源代码的冲动?你想掌握分析源代码的最佳实践吗?
······
计文柯:资深软件开发专家和项目经理,拥有10余年开发经验,对Spring等开源软件的应用和实现原理有深入研究和独到见解。产品研发和项目管理经验丰富,曾任职于华为技术、摩托罗拉等知名企业和硅谷移动互联网创业公司,在软件工程和项目管理方面积累了大量最佳实践。现在正在学习云计算,准备迎接即将爆发的计算革命。闲暇之余,他非常享受历史书籍带给他的快乐!
(注:放作者照片)

作者简介

计文柯 著:暂无简介

图书目录

本书赞誉
前  言
致  谢
第1章 准备源代码环境 1
1.1 安装JDK 1
1.2 安装Eclipse 1
1.3 安装辅助工具 2
1.4 获取Spring源代码 8
1.5 Spring源代码的组织结构 10
1.6 小结 12
第一部分 Spring核心实现篇
第2章 Spring Framework的核心:IoC容器的实现 16
2.1 Spring IoC容器概述 16
2.1.1 IoC容器和依赖反转模式 16
2.1.2 Spring的IoC容器系列 18
2.2 IoC容器系列的实现:BeanFactory
和ApplicationContext 20
2.2.1 BeanFactory对IoC容器的功能定义 20
2.2.2 IoC容器XmlBeanFactory的工作原理 22
2.2.3 ApplicationContext的特点 24
2.3 IoC容器的初始化 25
2.3.1 BeanDefinition的Resource定位 26
2.3.2 BeanDefinition的载入和解析 33
2.3.3 BeanDefinition在IoC容器中的注册 47
2.4 IoC容器的依赖注入 49
2.5 容器其他相关特性的实现 70
2.5.1 lazy-init属性和预实例化 70
2.5.2 FactoryBean的实现 73
2.5.3 BeanPostProcessor的实现 75
2.5.4 autowiring的实现原理 78
2.6 小结 80
第3章 Spring AOP的实现 82
3.1 Spring AOP概述 82
3.1.1 AOP概念回顾 82
3.1.2 Advice通知 84
3.1.3 Pointcut切点 88
3.1.4 Advisor通知器 90
3.2 建立AopProxy代理对象 92
3.2.1 配置ProxyFactoryBean 92
3.2.2 ProxyFactoryBean生成AopProxy 94
3.2.3 JDK生成AopProxy代理对象 98
3.2.4 CGLIB生成AopProxy代理对象 99
3.3 Spring AOP拦截器调用的实现 101
3.3.1 JdkDynamicAopProxy的invoke拦截 101
3.3.2 Cglib2AopProxy的intercept拦截 103
3.3.3 目标对象方法的调用 105
3.3.4 AOP拦截器链的调用 105
3.3.5 配置通知器 107
3.3.6 Advice通知的实现 112
3.3.7 ProxyFactory实现AOP 118
3.4 Spring AOP的高级特性 120
3.5 小结 121
第二部分 Spring组件实现篇
第4章 Spring MVC与Web环境 127
4.1 概述 127
4.2 Web环境中的Spring MVC 128
4.3 IoC容器在Spring MVC中的启动 130
4.3.1 Web容器中的上下文 130
4.3.2 ContextLoader建立Web环境的根上下文 132
4.4 Spring Web MVC的启动 136
4.4.1 DispacherServlet概述 136
4.4.2 DispacherServlet的启动和初始化 137
4.5 Spring MVC的实现 141
4.5.1 DispatcherSevlet的MVC初始化 141
4.5.2 HandlerMapping的配置 143
4.5.3 使用HandlerMapping完成请求的映射处理 148
4.5.4 Spring MVC对HTTP请求的分发处理 150
4.6 Spring MVC视图的呈现 155
4.6.1 DispatcherServlet视图呈现概述 155
4.6.2 JSP视图的实现 157
4.6.3 ExcelView的实现 160
4.6.4 PDF视图的实现 163
4.7 小结 165
第5章 数据库操作组件的实现 167
5.1 Spring JDBC和Spring ORM概述 167
5.2 Spring JDBC模板类的实现 167
5.2.1 JdbcTeamplate的基本使用 167
5.2.2 JdbcTemplate的execute实现 168
5.2.3 JdbcTemplate的query实现 170
5.2.4 使用数据库Connection 171
5.3 Spring JDBC中RDBMS操作对象的实现 172
5.3.1 SqlQuery的实现 173
5.3.2 SqlUpdate的实现 177
5.3.3 SqlFunction 178
5.4 Spring驱动Hibernate的实现 179
5.4.1 配置Hibernate的SessionFactory 180
5.4.2 HibernateTemplate的实现 185
5.4.3 Session的管理 187
5.5 Spring驱动iBatis的实现 190
5.5.1 创建SqlMapClient 190
5.5.2 SqlMapClientTemplate的实现 192
5.6 小结 194
第6章 Spring事务处理的    实现 196
6.1 Spring与事务处理 196
6.2 声明式事务处理的基本过程 196
6.2.1 事务处理拦截器的配置 197
6.2.2 事务处理配置的读入 200
6.3 事务处理拦截器的实现 203
6.4 事务处理的实现 206
6.4.1 事务处理的编程式使用 206
6.4.2 事务的创建 207
6.4.3 事务的挂起 214
6.4.4 事务的提交 215
6.4.5 事务的回滚 218
6.5 具体事务处理器的实现 219
6.5.1 DataSourceTransactionManager的实现 219
6.5.2 HibernateTransactionManager的实现 222
6.6 小结 227
第7章 Spring远端调用的     实现 230
7.1 Spring远端调用概述 230
7.2 Spring HTTP 调用器的实现原理 232
7.2.1 配置HTTP调用器客户端 232
7.2.2 HTTP调用器客户端的实现 232
7.2.3 配置HTTP调用器远端服务器端 237
7.2.4 HTTP调用器服务器端的实现 237
7.3 Spring Hession/Burlap的实现    原理 241
7.3.1 Hessian/Burlap客户端的配置 241
7.3.2 Hessian客户端的实现 242
7.3.3 Burlap客户端的实现 244
7.3.4 Hessian/Burlap服务器端的配置 247
7.3.5 Hessian服务器端的实现 247
7.3.6 Burlap服务器端的实现 250
7.4 Spring RMI的实现 252
7.4.1 Spring RMI客户端的配置 252
7.4.2 Spring RMI客户端的实现 253
7.4.3 Spring RMI服务器端的配置 256
7.4.4 Spring RMI服务器端的实现 257
7.5 小结 259
第8章 安全框架ACEGI的     实现 260
8.1 Spring ACEGI安全框架概述 260
8.1.1 概述 260
8.1.2 使用Spring IDE 261
8.1.3 ACEGI的Bean配置 263
8.2 配置Spring ACEGI 264
8.3 ACEGI的Web过滤器实现 267
8.4 ACEGI验证器的实现 269
8.4.1 AuthenticationManager的authenticate 269
8.4.2 DaoAuthenticationProvider的实现 271
8.4.3 读取数据库用户信息 273
8.4.4 完成用户信息的对比验证 276
8.5 ACEGI授权器的实现 277
8.5.1 与Web环境的接口FilterSecurityInterceptor 277
8.5.2 授权器的实现 280
8.5.3 投票器的实现 282
8.6 小结 283
第三部分 Spring应用篇
第9章 Spring petclinic应用实例 287
9.1 petclinic概述 287
9.2 部署环境及数据库 289
9.3 petclinic的Bean配置 290
9.4 petclinic的Web页面实现 291
9.5 petclinic的领域对象实现 293
9.6 petclinic数据库操作的实现 294
9.6.1 使用JDBC的数据库操作 294
9.6.2 使用Hibernate的数据库操作 295
9.6.3 使用JPA的数据库操作 297
9.7 小结 298

教学资源推荐
作者: 刘博 董学文 等编著
作者: [美] 基普·R.欧文(Kip R.Irvine) 著
作者: 严义 包健 周尉 编著
参考读物推荐
作者: 孙皓
作者: 吴永辉 王建德 编著