标题：精通Spring--Java轻量级架构开发实践
基本信息
作者： 孟劼  丛书名： 程序开发应用精通丛书.流行的Java
出版社：人民邮电出版社
ISBN：711515029x
上架时间：2006-8-25
出版日期：2006 年10月
开本：16开
页码：593
版次：1-1
内容简介
本书由浅入深，循序渐进地介绍了开源应用框架Spring的开发实践和思想。全书共分20章，内容涵盖了Spring的基础知识体系、获取和部署方法、背后的先进核心理念、相关的部分设计模式和J2EE核心模式、核心组件Bean工厂的使用、Spring风格的面向方面编程、各种J2EE企业级应用框架和解决方案（包括持久数据访问、事务管理、EJB、邮件服务、时程安排、Web MVC框架、表现层视图技术、JMX远程方案等）、Spring和单元测试等内容。
此外本书也剖析了Spring宠物店示例，最后还讨论了宠物店和Martin Fowler企业架构模式（POEAA）的关系。
本书适用于各种层面的读者，初、中级读者可以通过本书的示例讲解，全面运用Spring；而中高级读者也可以通过本书，深入理解Spring及其背后秉持的理念。    
目录
第1章  spring基础知识
1.1  spring的来历和目标
1.2  spring概览
1.3  spring的应用场景
1.4  spring和j2ee
1.4.1  经典j2ee体系架构
1.4.2  轻量级容器
1.4.3  spring和j2ee的关系
1.5  小结
第2章  开始spring之旅
2.1  获取spring
2.1.1  两大开源网站简介
2.1.2  获取spring发布包和源代码
2.2  spring的标准发布包和相关软件包
2.2.1  spring标准发布包
2.2.2  spring相关软件包
2.2.3  spring自带范例
2.3  部署spring
2.4  spring应用初体验
2.4.1  hello world遇到的问题
.2.4.2  使用spring对hello world进行重构
2.4.3  实现依赖注射（di）
2.4.3  重构总结
2.4.4  简单的web应用程序hello world
2.5  小结
第3章  贯穿spring应用的核心理念
3.1  轻量级容器再探
3.1.1  容器和轻量级容器
3.1.2  需要容器的理由
3.1.3  轻量级容器的优势
3.2  控制反转（ioc）
3.2.1  一个简单的例子
3.2.2  引入问题
3.2.3  使用控制反转（inversion of control）模式
3.2.4  总结
3.3  依赖注射
3.3.1  依赖注射的几种形式
3.3.2  使用spring 进行设值方法和构造函数注射
3.3.3  设值方法注射和构造函数注射的使用场合
3.4  面向方面编程（aspect oriented programming）
3.4.1  aop的历史来源
3.4.2  为什么需要aop
3.4.3  aop的重要概念
3.4.4  理解“横切”
3.4.5  aop的实现策略
3.4.6  认识aspectj
3.4.7  安装aspectj的运行环境
3.4.8  用j2se动态代理实现aop
3.4.9  用aspectj实现aop
3.4.10  深入理解aspectj
3.5  单元测试（unit test）
3.5.1  单元测试和junit框架
3.5.2  junit框架的三个核心概念
3.5.3  准备测试
3.5.4  添加测试代码并进行测试
3.5.5  取得更有意义的出错信息
3.5.6  捕捉错误信息
3.5.7  单元测试技巧
3.6  测试驱动开发（test driven development）
3.6.1  传统测试的问题
3.6.2  测试驱动开发的应对策略
3.6.3  一个简单的示例
3.6.4  总结测试驱动开发的优势
3.7 小结
第4章  模式：spring前行的路标
4.1  模式（pattern）入门
4.1.1  什么是模式
4.1.2  不用模式产生的问题
4.1.3  通过实例理解模式本质
4.1.4  做好准备，继续前行
4.2  工厂模式（design pattern：factory method）的精髓
4.2.1  引入问题
4.2.2  解决方法
4.2.3  工厂模式和依赖倒置的关系
4.3  单例模式（design pattern：singleton）
4.3.1  单例模式的实现
4.3.2  单例注册表
4.4  模板模式和策略模式（design pattern：template method and strategy）
4.4.1  模板模式
4.4.2  策略模式
4.5  代理模式（design pattern：proxy）
4.5.1  第一个代理模式的例子
4.5.2  虚拟代理（virtual proxy）
4.6  数据访问对象模式（j2ee pattern：data access object）
4.7  模型视图控制器模式（architecture/framework pattern：model view controller）
4.7.1  model 1和model 2简介
4.7.2  一个model 2框架示例
4.8  框架与模式的关系
4.9  spring和工厂模式
4.9.1  spring工厂体系的另类视图
4.9.2  spring工厂核心原理
4.10  spring和单例模式
4.11  spring的模板以及策略模式
4.11.1  spring模板模式
4.11.2  spring策略模式
4.12  spring和代理模式
4.13  spring和数据访问对象模式
4.14  spring和mvc模式
4.15  小结
第5章  spring核心bean工厂装配指南
5.1  核心bean工厂
5.1.1  初识bean工厂
5.1.2  拥有一份bean的基础定义
5.1.3  使用构造函数创建bean
5.1.4  使用静态工厂方法创建bean
5.1.5  使用实例工厂方法创建bean
5.1.6  bean的标识符
5.1.7  是否使用singleton
5.2  装配各种应用协作对象：bean
5.2.1  设置bean的属性和协作者
5.2.2  bean的依赖决议
5.2.3  构造子参数决议
5.2.4  自动装配（autowiring）
5.2.5  依赖检查
5.3  bean属性和构造函数参数的细节
5.3.1  使用value元素设定属性
5.3.2  使用null元素设定空值
5.3.3  使用collection（集合）元素定义集合
5.3.4  通过嵌套bean元素来定义内部bean（innerbean）
5.3.5  使用idref元素预检错误
5.3.6  使用ref元素设定依赖
5.3.7  value与ref的简写式
5.3.8  使用depends-on属性强制依赖
5.4  方法也可以被注射
5.4.1  使用lookup方法注射
5.4.2  替换任意方法
5.5  定制bean的一些原生属性
5.5.1  生命周期接口
5.5.2  让bean知道自己的身份
5.5.3  什么是factorybean
5.6  父和子bean的定义
5.7  使用后处理器(post-processor)
5.7.1  使用beanpostprocessor定制bean
5.7.2  使用beanfactorypostprocessor定制bean工厂
5.7.3  使用自定义的propertyeditor
5.8 小结
第6章 applicationcontext和更多特性
6.1  applicationcontext简介
6.2  applicationcontext的扩展功能
6.2.1  资源国际化
6.2.2  事件传播
6.2.3  底层资源和applicationcontext
6.3  在applicationcontext中客制bean的属性和行为
6.4  使用自定义的propertyeditors
6.5  创建web应用上下文
6.6  更多的轻松装配方式
6.6.1  从属性表达式来设置bean的属性或者构造函数参数
6.6.2  从一个字段值来设置bean的属性或者构造函数参数
6.6.3  调用另外一个方法并且使用其返回值（也可以没有返回值）
6.6.4  引入其他bean的定义文件
6.7  bean包装器（wrapper）和属性编辑器（propertyeditor）
6.7.1  beanwrapper简介
6.7.2  javabean属性的设置、获取及嵌套
6.7.3  属性编辑器
6.8  spring验证机制初探
6.9  小结
第7章  spring面向方面编程（aop）基础
7.1  spring aop基础概念
7.1.1  aop联盟简介
7.1.2  spring aop功能简介
7.1.3  spring aop概念重整
7.2  springaop编程起步
7.2.1  陈旧案例重现
7.2.2  抽离关注点，给予建议
7.2.3  划分切入点
7.2.4  结合spring aop和ioc：声明配置
7.3  spring aop代理和代理工厂
7.3.1  spring代理工厂简介
7.3.2  使用proxyfactory
7.3.3  使用proxyfactorybean
7.3.4  使用proxyfactorybean暴露的属性
7.3.5  选择合适的aop代理
7.4  spring aop建议（advice）
7.4.1  前置建议（before advice）
7.4.2  返回后（后置）建议（after returning advice）
7.4.3  环绕拦截建议（interception around advice）
7.4.4  抛出建议（throws advice）
7.4.5  引介建议（introduction advice）
7.5  spring aop切入点（pointcut）和顾问（advisor）
7.5.1  未使用切入点存在的问题
7.5.2  引入切入点和顾问
7.5.3  初识切入点背后的classfilter和methodmatcher
7.5.4  透过methodmatcher了解静态和动态切入点
7.5.5  静态切入点和顾问：了解defaultpointcutadvisor
7.5.6  静态切入点和顾问：使用staticmethodmatcherpointcut
7.5.7  静态切入点和顾问：使用namematchmethodpointcut
7.5.8  静态切入点和顾问：使用正则表达式切入点
7.5.9  静态切入点和顾问：使用便利的切入点顾问（pointcutadvisor）
7.5.10  使用动态切入点（dynamic pointcut）和自定义顾问（advisor）
7.6 小结
第8章  spring面向方面编程（aop）高级应用
8.1  spring aop引介（introduction）概述
8.2  使用混入（mixin）实现引介（introduction）建议
8.2.1  引入目标对象和待织入功能接口
8.2.2  给予关键引介建议
8.2.3  声明配置引介建议并测试
8.3  使用自动代理（auto proxy）
8.4  spring aop企业级服务
8.4.1  spring aop企业级服务菜单
8.4.2  使用transactionproxyfactorybean提供声明式事务管理
8.4.3  更为强大灵活的事务管理声明方式
8.4.4  使用ejb代理
8.5 小结
第9章  j2ee的持久化数据访问方案
9.1  传统高效的jdbc方案
9.2  基于sql语句映射的ibatis
9.2.1  ibatis简介
9.2.2  ibatis和高级orm工具的比较
9.2.3  ibatis的应用场合
9.2.4  ibatis示例快照
9.3  流行的orm利器hibernate
9.3.1  hibernate简介
9.3.2  hibernate示例快照
9.4  再探数据访问对象（dao）
9.4.1  传统的jdbc和dao
9.4.2  ibatis和dao
9.4.3  hibernate和dao
9.5  orm方案的应用场合
9.6  宠物店背后的ibatis：sql map基本概念
9.7  宠物店背后的ibatis：xml配置文件
9.7.1  sql map的xml配置文件
9.7.2  使用[properties]元素引入属性文件
9.7.3  使用[setting]元素配置sqlmap
9.7.4  使用[typealias]元素指定别名
9.7.5  使用[transactionmanager]元素配置事务策略
9.7.6  使用[datasource]元素配置数据源
9.7.7  使用[sqlmap]元素引入sql map映射文件
9.7.8  先行准备主控测试和子测试套件
9.8  宠物店背后的ibatis：xml映射文件
9.8.1  sql map的xml映射文件
9.8.2  通过mapped statement使用sql
9.8.3  使用[statements]元素指定sql语句
9.8.4  sql语句特殊规则
9.8.5  inline parameter（内联参数）简介
9.8.6  使用parameterclass指定参数类
9.8.7  基本类型输入参数
9.8.8  使用resultclass指定结果类
9.8.9  使用resultmap配置映射
9.8.10  ibatis事务处理
9.8.11  第一阶段火力测试，继续前行
9.9  宠物店背后的ibatis：xml映射文件高级特性
9.9.1  ibatis自动生成的主键
9.9.2  简单的动态sql元素
9.9.3  缓存mapped statement结果集
9.9.4  缓存类型
9.9.5  动态mapped statement
9.9.6  运行自动测试
9.10  用hibernate创建spring宠物店的简易进货系统
9.10.1  spring宠物店持久层渗入
9.10.2  实现hibernate进货dao：实体持久对象
9.10.3  实现hibernate进货dao：映射和基本配置
9.10.4  实现hibernate进货dao：工具类和dao实现
9.10.5  实现hibernate进货dao：测试验收
9.11  小结
第10章  spring和j2ee持久化数据访问
10.1  spring对数据访问对象（dao）的支持
10.1.1  通用的数据访问异常
10.1.2  通用的dao抽象支持类
10.1.3  向业务对象注射dao
10.2  spring对jdbc的支持
10.2.1  jdbctemplate和数据源概述
10.2.2  使用jdbctemplate和数据源
10.2.3  对象化rdbms操作概述
10.2.4  对象化rdbms操作：使用mappingsqlquery
10.2.5  对象化rdbms操作：使用sqlupdate
10.3  spring对ibatis的支持
10.3.1  标准javabean实体和映射
10.3.2  衔接ibatis配置和dao实现
10.3.3  关键整合点：spring配置文件
10.3.4  添加声明式事务管理
10.4  spring对hibernate的支持
10.4.1  在spring上下文中配置sessionfactory
10.4.2  重建hibernate进货dao伪实现
10.4.3  tdd又来了：规划测试案例
10.4.4  tdd又来了：完善基础设施
10.4.5  添加hibernatetemplate和hibernatecallback实现，交付测试
10.4.6  声明式管理hibernate本地事务
10.4.7  声明式管理hibernate分布式事务
10.5 小结
第11章 传统的企业javabean（ejb）
11.1 什么是ejb
11.2  什么是会话bean（session bean）
11.2.1  无状态会话bean
11.2.2  有状态会话bean
11.2.3  何时使用会话bean
11.3  实体bean（entity bean）
11.3.1  entitybean和session bean的异同
11.3.2  容器管理的持久性（cmp）
11.3.3  何时需要entitybean
11.4  消息驱动bean
11.4.1  message-drivenbean和session以及entity bean的异同
11.4.2  何时使用message-drivenbean
11.5  定义客户端访问接口
11.5.1 远程客户端（remote clients）
11.5.2  本地客户端（local clients）
11.5.3  local接口和cmr（container-managed relationships）
11.5.4  远程还是本地访问的选用
11.5.5  方法参数和访问方式
11.6  企业bean的内容和命名约定
11.7  ejb和jboss开发实践
11.7.1  jboss的安装与启动
11.7.2  在jboss下开发部署第一个helloworld ejb
11.7.3  无状态会话bean（stateless session bean）：开发和部署
11.7.4  无状态会话bean：效果和生命周期
11.7.5  有状态会话bean（stateful session bean）：开发和部署
11.7.6  有状态会话bean（stateful session bean）：效果和生命周期
11.8  小结
第12章  spring和ejb
12.1  概述
12.2  spring对ejb提供的支持
12.3  spring的ejb抽象访问层
12.3.1  深入beanfactorylocator接口
12.3.2  beanfactorylocator背后资源消耗的考量
12.4  使用spring构建本地无状态会话bean
12.4.1  提供业务契约：公共服务接口
12.4.2  提供本地和本地home接口
12.4.3  提供可测试的业务委托：pojo实现类
12.4.4  提供spring介入的企业bean实现主类
12.4.5  给出ejb组件部署描述符
12.4.6  给出spring和特定ejb容器配置，发布ejb
12.4.7  创建web客户端，配置web应用
12.4.8  解析spring配置：slsb代理工厂bean
12.4.9  创建servlet测试slsb，发布web客户包
12.5  使用spring构建本地有状态会话bean
12.5.1  回顾比较，给出sfsb解决方案
12.5.2  提供业务契约：公共服务接口
12.5.3  提供本地和本地home接口
12.5.4  提供可测试的业务委托：pojo实现类
12.5.5  提供spring介入的企业bean实现主类
12.5.6  提供定制的ejb异常
12.5.7  给出部署表述符和spring配置文件
12.5.8  创建web客户端，配置web应用
12.5.9  解析spring配置：使用jndiobjectfactorybean自动查找jndi
12.5.10  创建servlet测试sfsb，发布web客户包
12.6  spring眼中的ejb
12.6.1  ejb的缺点
12.6.2  spring提倡的j2ee轻量架构理念：ioc/di、aop、装配和粘合
12.7  小结
第13章  spring和邮件服务
13.1  spring邮件抽象层
13.2  使用spring邮件抽象发送简单文本邮件
13.2.1  定义抽象父类模板
13.2.2  实现邮件发送子类
13.2.3  更灵活的实现
13.2.4  特定功能的子类实现
13.3  发送（multipart）html mime邮件的设计实现
13.3.1  分析设计和初步实现
13.3.2  定义mailmessage实体
13.3.3  功能实现和配置
13.4  发送html/纯文本mime邮件，使用接口回调
13.4.1  回调的契机
13.4.2  功能实现和配置
13.5 小结
第14章  spring和排程（scheduling）技术
14.1  排程（scheduling）原理
14.2  什么是timer
14.2.1  执行一次
14.2.2  周期执行
14.3  spring对timer的支持
14.3.1  用spring来控制timer
14.3.2  使用methodinvokingtimertaskfactorybean
14.4 什么是quartz
14.4.1  quartz的核心概念
14.4.2  使用simpletrigger排程
14.4.3  使用crontrigger排程
14.5  spring对quartz的支持
14.5.1  使用spring支持quartz simpletrigger排程
14.5.2  使用spring支持quartz crontrigger排程
14.6  quartz的持久化
14.6.1  quartz持久机制的核心概念
14.6.2  使用spring做一个jdbc有状态quartz job
14.6.3  jdbc持久的有状态和无状态job示例运行效果解析
14.7  小结
第15章  j2ee中流行的web mvc框架
15.1  请求驱动的web mvc框架简介
15.2  请求驱动的web mvc框架在struts中的实现
15.2.1  struts的简介和基本web配置
15.2.2  struts的action和actionform
15.2.3  struts的核心原理
15.3  请求驱动的web mvc框架在webwork2中的实现
15.3.1  webwork2简介
15.3.2  webwork2实现web登录的页面流程
15.3.3  webwork2开发实践：配置web应用
15.3.4  webwork2开发实践：配置验证、实现action并绑定验证
15.3.5  webwork2开发实践：实现视图
15.4  事件驱动的web mvc框架
15.4.1  简介
15.4.2  tapestry概述
15.4.3  搭建tapestry示例运行环境
15.4.4  tapestry开发实践：配置web应用
15.4.5  tapestry开发实践：创建html视图模板
15.4.6  tapestry开发实践：创建html组件规范文件
15.4.7  tapestry开发实践：创建页面类
15.4.8  无需组件规范的html视图模板
15.5  小结
第16章  请求驱动的spring web mvc框架
16.1  spring web mvc框架简介
16.2  分发器（dispatcherservlet）
16.3  处理器映射（handler mapping）
16.4  处理器拦截器（handlerinterceptor）
16.5  控制器简介（controller）
16.5.1  简单控制器
16.5.2  控制器抽象基类
16.5.3  命令控制器抽象基类
16.5.4  表单控制器简介
16.6  普通表单控制器
16.6.1  普通表单控制器：视图流转
16.6.2  普通表单控制器：基本配置
16.6.3  普通表单控制器：控制器和处理流程
16.6.4  普通表单控制器：表单、领域模型和视图
16.6.5  普通表单控制器：验证器和错误采集
16.7  向导式表单控制器
16.7.1  向导式表单控制器：视图流转
16.7.2  向导式表单控制器：基本配置
16.7.3  向导式表单控制器：控制器、验证器和处理流程
16.7.4  向导式表单控制器：表单、领域模型
16.8  模型、视图和视图解析（view resovling）
16.8.1  返回视图名称
16.8.2  保存模型属性
16.8.3  视图解析器和视图抽象
16.9  小结
第17章  spring和视图技术及web框架的集成
17.1  spring集成jsp和jstl
17.1.1  jsp和jstl简介
17.1.2  视图解析器
17.1.3  spring的专有标签
17.2  spring集成xslt
17.2.1  xslt简介
17.2.2  示例开发：需求和部署配置
17.2.3  示例开发：配置web应用
17.2.4  示例开发：把模型数据转换成xml文档
17.2.5  示例开发：使用xslt进行文档转换
17.3  spring集成pdf/excel
17.3.1  简介
17.3.2  示例开发：部署、配置web应用和模型数据采集
17.3.3  示例开发：把模型数据转换成pdf和excel视图
17.4  spring集成struts
17.4.1  集成概述和手法
17.4.2  spring应用上下文装载的两种方式
17.4.3  使用spring 的actionsupport类整合struts
17.4.4  使用spring的delegatingrequestprocessor覆写struts的requestprocessor
17.4.5  使用spring代理委托管理struts action
17.4.6  使用spring拦截struts action，替换宠物店的安全策略
17.5  spring集成webwork2
17.6  spring集成tapestry4
17.6.1  tapestry4背后的ioc容器：hivemind
17.6.2  部署环境和逻辑分层
17.6.3  分层重构：引入表现层的业务注射，转移业务逻辑
17.6.4  分层重构：引入业务层，实现业务逻辑
17.6.5  分层重构：引入工具层，向tapestry应用注射spring上下文
17.6.6  集成配置：web应用配置、修改组件规范文件
17.6.7  集成配置：通过hivemind和工具类，衔接spring
17.7 小结
第18章  spring和单元测试
18.1  模仿对象
18.2  spring mock简介
18.2.1  spring mock web简介
18.2.2  扩展junit框架的测试基类
18.3  spring mock快速指南
18.3.1  web组件的单元测试：搭建测试环境
18.3.2  web组件的单元测试：视图转发
18.3.3  web组件的单元测试：会话状态
18.3.4  web组件的单元测试：简单逻辑
18.3.5 事务性单元测试：使用spring mock事务基类搭建测试环境
18.4  easymock快速指南
18.4.1 easymock简介
18.4.2组件单元测试：搭建测试环境
18.4.3组件单元测试：模拟业务接口和领域对象的交互
18.4.4组件单元测试：模拟具体类和dao的交互
18.5  结合使用spring mock和easymock
18.5.1 web组件单元测试：模拟控制器和业务接口、领域对象的交互
18.5.2 web组件单元测试：重定向测试
18.6 小结
第19章  spring和jmx技术
19.1  jmx概述
19.2  jmx的体系分层架构
19.2.1  核心组件
19.2.2  设备层（instrumentation level）
19.2.3  代理层（agent level）
19.2.4 分布服务层（distributed service level）
19.2.5附加管理协议api
19.3  jmx编程实践
19.3.1  标准mbean编程：mbean接口和实现类
19.3.2  标准mbean编程：jmx agent
19.3.3  标准mbean编程：手工和可视化注册mbean
19.3.5  通知模型编程
19.3.6  动态mbean和辅助元数据类编程
19.3.7  jmx连接器（connectors）编程：基本流程
19.3.8  jmx connectors编程：准备mbean套件和监听器
19.3.9  jmx connectors编程：创建服务器
19.3.10  jmx connectors编程：创建客户端
19.4  spring对jmx的集成支持
19.4.1  spring集成jmx概述
19.4.2  视spring bean为jmx mbean：简单的javabean配置
19.4.3  视spring bean为jmx mbean：客户代码
19.4.4  视spring bean为jmx mbean：自动侦测并且注册mbean
19.4.5  视spring bean为jmx mbean：objectname命名策略
19.4.7  spring的jsr-160 connector支持：服务器端配置和代码
19.4.8  spring的jsr-160 connector支持：客户端配置和代码
19.4.9  sping集成jmx技术展望
19.5 小结
第20章  从spring宠物店看企业应用架构模式
20.1  企业应用架构模式(poeaa)简介
20.1.1  什么是企业应用架构模式
20.1.2  架构和分层
20.1.3  企业应用
20.2  宠物店和分层
20.3  宠物店和领域逻辑
20.3.1  如何组织领域逻辑
20.3.2  事务脚本
20.3.3  领域模型的基本概念
20.3.4  领域模型的持久
20.3.5  服务层
20.4  宠物店和数据源架构模式
20.5  宠物店和web表现模式
20.5.1  模板视图
20.5.2  转换视图
20.5.3  两步视图
20.6  小结