基本信息出版社:机械工业出版社
页码:300 页
出版日期:2010年01月
ISBN:9787111288060
条形码:9787111288060
版本:第1版
装帧:平装
开本:16
正文语种:中文
丛书名:揭秘系列丛书
内容简介 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自执笔!Java开发者社区和Spring开发者社区一致强烈推荐。国内第一本基于Spring3.0的著作,从源代码的角度对Spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从木书中参透Spring框架的优秀架构和设计思想,而且还能从Spring优雅的实现源码中一窥Java语言的精髓。此外,《Spring技术内幕:深入解析Spring架构与设计原理》还展示了阅读源代码的卓越方法,不仅授你以鱼,而且还授你以渔!
如果你以一种淡定的心态翻开这本书,无论你是Java程序员、Spring开发者,还是平台开发人员、系统架构师,抑或是对开源软件源代码着迷的代码狂人,都能从《Spring技术内幕:深入解析Spring架构与设计原理》中受益。
《Spring技术内幕:深入解析Spring架构与设计原理》特色:
作者从业10余载,悟透Spring等开源软件的本质,权威性毋庸置疑。
Java开发者社区、专业Spring开发者社区和架构师社区一致鼎力推荐!
深入解析Spring架构原理与设计思想,探究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等开源软件的应用和实现原理有深入研究和独到见解。产品研发和项目管理经验丰富,曾任职于华为技术、摩托罗拉等知名企业和硅谷移动互联网创业公司,在软件工程和项目管理方面积累了大量最佳实践。现在正在学习云计算,准备迎接即将爆发的计算革命。闲暇之余,他非常享受历史书籍带给他的快乐!
编辑推荐 《Spring技术内幕:深入解析Spring架构与设计原理》:深度解读Spring 3.0源代码,Java社区和Spring 社区一致鼎力推荐。
目录
本书赞誉
前言
致谢
第1章 准备源代码环境
1.1 安装JDK
1.2 安装Eclipse
1.3 安装辅助工具
1.4 获取Spring源代码
1.5 Spring源代码的组织结构
1.6 小结
第一部分 Spring核心实现篇
第2章 Spring Framework的核心:IoC容器的实现
2.1 Spring IoC容器概述
2.1.1 IoC容器和依赖反转模式
2.1.2 Spring的IoC容器系列
2.2 IoC容器系列的实现:BeanFactory和Application Context
2.2.1 Bean Factory对IoC容器的功能定义
2.2.2 IoC容器Xml Bean Factory的工作原理
2.2.3 ApplicationContext的特点
2.3 IoC容器的初始化
2.3.1 BeanDefinition的Resource定位
2.3.2 BeanDefinition的载入和解析
2.3.3 BeanDefinition在IoC容器中的注册
2.4 IoC容器的依赖注入
2.5 容器其他相关特性的实现
2.5.1 lazy-init属性和预实例化
2.5.2 FactoryBean的实现
2.5.3 BeanPostProcessor的实现
2.5.4 autowiring的实现原理
2.6 小结
第3章 Spring AOP的实现
3.1 Spring AOP概述
3.1.1 AOP概念回顾
3.1.2 Advice通知
3.1.3 Pointcut切点
3.1.4 Advisor通知器
3.2 建立AopProxy代理对象
3.2.1 配置ProxyFactoryBean
3.2.2 ProxyFactoryBean生成AopProxy
3.2.3 JDK生成AopProxy代理对象
3.2.4 CGLIB生成AopProxy代理对象
3.3 Spring AOP拦截器调用的实现
3.3.1 JdkDynamicAopProxy的invoke拦截
3.3.2 Cglib2AopProxy的intercept拦截
3.3.3 目标对象方法的调用
3.3.4 AOP拦截器链的调用
3.3.5 配置通知器
3.3.6 Advice通知的实现
3.3.7 ProxyFactory实现AOP
3.4 Spring AOP的高级特性
3.5 小结
第二部分 Spring组件实现篇
第4章 Spring MVC与Web环境
4.1 概述
4.2 Web环境中的Spring MVC
4.3 IoC容器在Spring MVC中的启动
4.3.1 Web容器中的上下文
4.3.2 ContextLoader建立Web环境的根上下文
4.4 Spring Web MVC的启动
4.4.1 DispacherServlet概述
4.4.2 DispacherServlet的启动和初始化
4.5 Spring MVC的实现
4.5.1 DispatcherSevlet的MVC初始化
4.5.2 HandlerMapping的配置
4.5.3 使用HandlerMapping完成请求的映射处理
4.5.4 Spring MVC对HTTP请求的分发处理
4.6 Spring MVC视图的呈现
4.6.1 DispatcherServlet视图呈现概述
4.6.2 JSP视图的实现
4.6.3 ExcelView的实现
4.6.4 PDF视图的实现
4.7 小结
第5章 数据库操作组件的实现
5.1 Spring JDBC和Spring ORM概述
5.2 Spring JDBC模板类的实现
5.2.1 JdbcTeamplate的基本使用
5.2.2 JdbcTemplate的execute实现
5.2.3 JdbcTemplate的query实现
5.2.4 使用数据库Connection
5.3 Spring JDBC中RDBMS操作对象的实现
5.3.1 SqlQuery的实现
5.3.2 SqlUpdate的实现
5.3.3 SqlFunction
5.4 Spring驱动Hibernate的实现
5.4.1 配置Hibernate的SessionFactory
5.4.2 HibernateTemplate的实现
5.4.3 Session的管理
5.5 Spring驱动iBatis的实现
5.5.1 创建SqlMapClient
5.5.2 SqlMapClientTemplate的实现
5.6 小结
第6章 Spring事务处理的实现
6.1 Spring与事务处理
6.2 声明式事务处理的基本过程
6.2.1 事务处理拦截器的配置
6.2.2 事务处理配置的读入
6.3 事务处理拦截器的实现
6.4 事务处理的实现
6.4.1 事务处理的编程式使用
6.4.2 事务的创建
6.4.3 事务的挂起
6.4.4 事务的提交
6.4.5 事务的回滚
6.5 具体事务处理器的实现
6.5.1 DataSourceTransactionManager的实现
6.5.2 HibernateTransactionManager的实现
6.6 小结
第7章 Spring远端调用的 实现
7.1 Spring远端调用概述
7.2 Spring HTTP 调用器的实现原理
7.2.1 配置HTTP调用器客户端
7.2.2 HTTP调用器客户端的实现
7.2.3 配置HTTP调用器远端服务器端
7.2.4 HTTP调用器服务器端的实现
7.3 Spring Hession/Burlap的实现 原理
7.3.1 Hessian/Burlap客户端的配置
7.3.2 Hessian客户端的实现
7.3.3 Burlap客户端的实现
7.3.4 Hessian/Burlap服务器端的配置
7.3.5 Hessian服务器端的实现
7.3.6 Burlap服务器端的实现
7.4 Spring RMI的实现
7.4.1 Spring RMI客户端的配置
7.4.2 Spring RMI客户端的实现
7.4.3 Spring RMI服务器端的配置
7.4.4 Spring RMI服务器端的实现
7.5 小结
第8章 安全框架ACEGI的 实现
8.1 Spring ACEGI安全框架概述
8.1.1 概述
8.1.2 使用Spring IDE
8.1.3 ACEGI的Bean配置
8.2 配置Spring ACEGI
8.3 ACEGI的Web过滤器实现
8.4 ACEGI验证器的实现
8.4.1 AuthenticationManager的authenticate
8.4.2 DaoAuthenticationProvider的实现
8.4.3 读取数据库用户信息
8.4.4 完成用户信息的对比验证
8.5 ACEGI授权器的实现
8.5.1 与Web环境的接口FilterSecurityInterceptor
8.5.2 授权器的实现
8.5.3 投票器的实现
8.6 小结
第三部分 Spring应用篇
第9章 Spring petclinic应用实例
9.1 petclinic概述
9.2 部署环境及数据库
9.3 petclinic的Bean配置
9.4 petclinic的Web页面实现
9.5 petclinic的领域对象实现
9.6 petclinic数据库操作的实现
9.6.1 使用JDBC的数据库操作
9.6.2 使用Hibernate的数据库操作
9.6.3 使用JPA的数据库操作
9.7 小结
……
序言 作为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源代码!经过这么多年的发展,其核心已经比较稳定了,包括各个基本包的设计和命名。同时,我们从这些源代码的组织也隐约地看到了sp血g的配置管理和构建过程,比如项目组织、测试管理、构建工具以及依赖关系管理工具的使用等,这些都为sp血g代码的高质量开发奠定了。一个良好的工程环境。有兴趣的读者不妨自己做个研究,看看spring的构建过程是怎样完成的。
1.6小结
问渠哪得清如许,为有源头活水来。本章我们从spring的源头开始,对spring源代码的工程环境进行了介绍,通过这些介绍,读者已经具备自己动手对源代码进行分析的能力。另外,我们使用Eclipse开发环境,对源代码进行分析的一些实践经验,以及和开源软件开发过程紧密相关的一些基本知识进行介绍,这些知识不仅对sp血g适用,而且对其他的开源软件开发也具有非常好的借鉴意义。
有了软件工程环境的有力支持,以及在这个环境基础上,对sp血g源代码结构的基本了解,我们已经具备了阅读spring源代码的基本条件,就是这些源代码,是我们深入了解spring实现原理的有力武器,也是开源软件最宝贵的财富。让我们养成动手到源代码中去看个究竟以解迷惑的习惯吧,从个人的切身体验来看,这可是一个深入了解软件实现原理的好习惯。对实现的商业软件产品也是一样如此。让我们望一下这片生机勃勃而又有些神秘的代码丛林,就像探险者面对茂密的热带雨林那样,一起做个深呼吸,准备开始这充满乐趣和挑战的Spring源代码之旅吧!