该用户从未签到
|
揭示内幕、深入浅出9 }3 y, l. |4 [. t0 Y# W
同步更新、与时俱进
: R7 K% u" K# @0 h( D; D- b2 q" W7 ?突出重点,淡化边缘
9 r- i: S+ l% E理论透彻、面向实践- N! Q7 Y! Y7 ~( Y; ^4 g" L# P
代码简洁、图例丰富" R/ y; ^0 H" G2 S: T# `
注重趣味、轻松阅读) J* F/ i* n; w: O( t9 Y
相关知识、一网打尽% A$ P& o4 V( A! k
历时一载、倾力打造% O' j, h! T, L6 ]0 O) x
=================
7 j6 k' A8 B3 A2 P5 a3 `0 bspring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为java领域第一开源平台的翘楚地位。1 x+ g' G* n( m: f3 j
Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升应用开发的优雅性。, g! m- n( j0 c3 o
《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。此外,本书重点突出了“实战性”的主题,力求使全书“从实际项目中来,到实际项目中去”。
. g1 L! {) V/ b! k! O===========================================================================================0 Y5 X0 p6 [, I5 b! P1 R# J6 d
第1篇 概述
1 b3 a4 p1 T# ^6 ~, j- {. C w第1章 Spring概述, d9 M( n1 m$ {0 K
1.1 认识Spring. C: M. _- f# \, @4 @) r7 i
1.2 关于SpringSource" f: \* E2 `) W' `- V q
1.3 Spring带给我们什么
! h. X [% q5 C" F+ {7 d' m; R1.4 Spring体系结构
% g( H, \' R+ w0 r$ L' z+ C1.5 Spring 3.0的新功能1 @; J: k% F" x" {
1.5.1 核心API更新到Java 5.
+ v2 z/ B7 C/ D# }5 s1.5.2 Spring表达式语言# {" _8 K4 M+ e2 w; B2 G( [3 ^
1.5.3 可通过Java类提供IoC配置信息
8 w! n2 G& {: O8 q1.5.4 通用类型转换系统和属性格式化系统9 u. }1 ^- r, w6 p8 L2 N
1.5.5 数据访问层新增OXM功能
$ }$ F* N7 M2 _! N8 R+ ?6 ~8 ?1.5.6 Web层的增强
7 L. p* U5 w2 ^2 C9 n8 H4 h1.5.7 其他5 ]1 U; b7 G* S. k0 C/ F
1.6 Spring对Java版本的要求
: a5 @/ J y- Y3 E0 ~- G% r1.7 如何获取Spring
0 N; @9 J: ] b) l' X1.8 小结
3 F1 H9 ~( F+ m D' P& [第2章 快速入门
1 W9 O# \" f9 ^4 Z2.1 实例功能概述
1 d2 \) ^% c6 C3 }. }2.1.1 比Hello World更适用的实例6 a7 t' d v& h: W, s8 }
2.1.2 实例功能简介
# Z# U5 U' T8 l M3 E' W0 d2.2 环境准备
9 {2 Y4 v; |! K/ U) q/ L2.2.1 创建库表
& M* Y2 v: S; w! r* t0 M5 ]2.2.2 建立工程
, h3 `% t% |9 W9 ^ I2.2.3 类包及Spring配置文件规划
: i- C( w7 c7 B. H6 ]2.3 持久层; O1 {9 w8 l( P1 V( O/ G
2.3.1 建立领域对象 I3 ~. k' c# M
2.3.2 UserDao
0 I, z* S% d% ^) y' v/ n' }2.3.3 LoginLogDao) h# R7 K6 N' [% ]5 k1 M& l: U8 z* q
2.3.4 在Spring中装配DAO
" {" _! p k9 a$ Z% _- [3 J ?0 Z" r2.4 业务层
+ l% R4 ~6 I! j1 C) g x2.4.1 UserService; F0 q. Z2 i V0 ]
2.4.2 在Spring中装配Service( U, V1 a$ b1 }
2.4.3 单元测试
/ A9 q3 W: p7 [; ^1 c9 O J' ?2.5 展现层3 S! [" c4 l6 n
2.5.1 配置Spring MVC框架
, g! f6 z; W, o' v- S. H2.5.2 处理登录请求
2 D7 f* ~5 W3 k0 C# o2 t2.5.3 JSP视图页面1 w. Z, e- `: U0 m
2.6 运行Web应用
' b8 c( ?; R+ t5 s. I( c5 d/ e0 Y& ?2.7 小结
# U9 [- N& {2 E& R+ d( A
7 q5 j, n5 ^& y- h. y第2篇 IoC和AOP1 a$ p5 D- V4 I
第3章 IoC容器概述
7 a5 E7 K( |$ V4 D s$ t% D, o3.1 IoC概述% Z! ]# ?8 t/ o- U1 {+ P
3.1.1 通过实例理解IoC的概念
; s3 ]6 @# a+ U6 g, u3.1.2 IoC的类型4 c' x) ?- K7 I X' T) u0 Z
3.1.3 通过容器完成依赖关系的注入
2 T+ ]2 Z$ W, L- ^2 d7 ~3.2 相关Java基础知识
; k8 v" j4 v/ u: q5 h( ^3 r3.2.1 简单实例
. r1 A. z% @7 n @8 N* @3 P: m, t$ v3.2.2 类装载器ClassLoader" x& G8 F) }+ W3 s6 l* c
3.2.3 Java反射机制; ]! E" X& ^# w& [5 w
3.3 资源访问利器; x( ]! Q" `5 _2 k3 ]8 K
3.3.1 资源抽象接口) K9 F$ f; q, S% @, R
3.3.2 资源加载- O1 ]; F1 ]7 }3 |$ p; c
3.4 BeanFactory和ApplicationContext
- t, y8 s. x" |. F3.4.1 BeanFactory介绍# Z8 ^ P# j6 R" H9 z
3.4.2 ApplicationContext介绍+ m" r5 C5 X! K }" L
3.4.3 父子容器
w" J. {# w$ m* e9 A) f3 C' c) A3.5 Bean的生命周期' N3 D5 _1 T& F
3.5.1 BeanFactory中Bean的生命周期3 T" Y: U; N2 k
3.5.2 ApplicationContext中Bean的生命周期8 i9 j0 L" h: W4 ]. h! ^
3.6 小结
' m- C% B0 H( s7 g9 I4 o4 v第4章 在IoC容器中装配Bean
4 J. N# {3 K( {$ h0 f' A* {2 C4.1 Spring配置概述
- W5 ~+ {3 W/ j' c1 E! C o4 A4.1.1 Spring容器高层视图9 M, k. o0 U: I: E# n) V8 B; i
4.1.2 基于XML的配置) o# \/ I' @$ L0 H+ v7 A
4.2 Bean基本配置 v" F9 X; h2 f
4.2.1 装配一个Bean
: R2 p+ ]' D$ J a* s, P# ^4.2.2 Bean的命名
1 b4 d- B( c0 c2 r$ ~2 ]8 n4.3 依赖注入
V9 i3 m; W( k4.3.1 属性注入# ]5 Z# m- C7 v; B- g5 c" S. k
4.3.2 构造函数注入
2 K" ?- g2 t) u7 U" Z4.3.3 工厂方法注入
! d8 n1 W Z) z- I9 W" ~4.3.4 选择注入方式的考量
0 t4 X6 l" D' g* B4.4 注入参数详解
9 [4 Y+ }+ q( |, K# e) @4.4.1 字面值1 D. T! k# X5 |: n, d
4.4.2 引用其他Bean
4 J4 v4 R8 l1 p# V+ H/ i% E7 u* m4.4.3 内部Bean8 r$ I' T l7 u- x
4.4.4 null值
4 i1 q9 ^- U; ^# x" c: b& U0 I4.4.5 级联属性
" L/ G% s1 s# S9 g' {, n- M4.4.6 集合类型属性# c- R1 } b$ m0 t% d
4.4.7 简化配置方式( x; K6 @9 M% z; g
4.4.8 自动装配
) s0 `3 c0 o/ K4 I9 j" k! ?4.5 方法注入
Q& Q$ a; f" I& g4.5.1 lookup方法注入
8 O( z3 n2 R- d4.5.2 方法替换9 U8 I0 l+ g/ Q& e; I9 m
4.6 <bean>之间的关系 q3 O# r6 D# X' `" \/ K1 e" s
4.6.1 继承
: X9 ^0 T [" [7 ]' \7 d4.6.2 依赖
7 O5 i @* |& j8 ^5 u8 c- e6 f4.6.3 引用7 _4 \8 c6 ]' B$ @6 ^# N
4.7 整合多个配置文件
: x! C( D* R O9 i& b- b7 ^4.8 Bean作用域
- |1 @" _0 F Z8 H; }4.8.1 singleton作用域6 j4 s& l% H; F7 m9 ?$ ], E' h
4.8.2 prototype作用域( Q% Y! O/ R [9 Q7 E; `
4.8.3 Web应用环境相关的Bean作用域6 e* J0 {0 Z8 {# N
4.8.4 作用域依赖问题$ W+ l" {5 o& j. I5 [
4.9 FactoryBean
* [" @* B4 r V2 {8 H/ k4.10 基于注解的配置
& q( I4 f$ d7 k4.10.1 使用注解定义Bean
9 w( b" x/ l7 X5 k! s3 \2 u4.10.2 使用注解配置信息启动Spring容器+ y& R% u+ }. M# k' L0 K
4.10.3 自动装配Bean
+ O1 I! Z! A& ?4.10.4 Bean作用范围及生命过程方法; q4 w- q6 x; g8 h! D# c
4.11 基于Java类的配置
7 ^. R6 }; X2 q/ ^ E7 F4.11.1 使用Java类提供Bean定义信息) [. R# r s4 Q3 u4 k) |
4.11.2 使用基于Java类的配置信息启动Spring容器
/ ?. l% F8 M. G1 x/ X4.12 不同配置方式比较4 w+ g) G' ?9 L) `2 b
4.13 小结
( E5 Q% m, j: q* F$ K# ?9 h; z5 X$ L第5章 Spring容器高级主题( B" ?) k0 d K/ g$ B1 R
5.1 Spring容器技术内幕
" Q1 X& V3 F4 m3 U: n5.1.1 内部工作机制3 W' o8 f# ~. Z0 @4 I8 A3 Q# K
5.1.2 BeanDefinition' g6 [ A% J; o7 x" a
5.1.3 InstantiationStrategy$ ~( t6 B& T3 e6 L1 H$ m9 U
5.1.4 BeanWrapper
7 I3 z3 d. O6 s# S1 G0 Y5.2 属性编辑器
0 A4 a) M( c5 m% W5.2.1 JavaBean的编辑器
# p" M4 d5 g$ |% F0 R5.2.2 Spring默认属性编辑器
( _$ L& S; @# q9 x5 Y- O5.2.3 自定义属性编辑器3 q% E* J- c1 j7 N! |5 w
5.3 使用外部属性文件$ s+ @' n7 z! }* @' P1 H' @$ @/ H
5.3.1 使用外部属性文件
9 F& \5 Z8 _3 j8 ^! f0 [5.3.2 使用加密的属性文件
5 c: \+ e" Z. q) k5.3.3 属性文件自身的引用
9 a' X. a" k# b4 o5.4 引用Bean的属性值: V3 D; @, [4 R4 E
5.5 国际化信息3 V/ J5 e! p0 i/ t; j, @# O
5.5.1 基础知识. H2 i, g, H( X$ B; f- k
5.5.2 MessageSource" g3 t4 P+ x5 u2 [* g: s+ c
5.5.3 容器级的国际化信息资源
# z: @! `: [' \2 I& U! ]5.6 容器事件
, I' E% c/ G1 v/ r% ]3 ]7 j5.6.1 Spring事件类结构" }& \3 V( T- z+ s. V, }) ~* T
5.6.2 解构Spring事件体系的具体实现
1 G: z; s$ s% [5 y' }5.6.3 一个实例
; R8 y" `- O( K7 M2 {5.7 小结
1 ?/ c- r4 F6 u第6章 Spring AOP基础
; W7 C* T5 P" d# a0 b! y3 _6.1 AOP概述; M9 h. \* A( Z* q* M
6.1.1 AOP到底是什么8 U5 X$ L0 u$ T( U6 {( X
6.1.2 AOP术语
5 Q9 V; c6 I% |, M4 P% X& _% X6.1.3 AOP的实现者
- d6 s5 N& V2 T r6.2 基础知识
0 E! x) n8 E; @6.2.1 带有横切逻辑的实例
- M% t, {4 G1 Q' y6.2.2 JDK动态代理4 I6 C; k* p+ @$ y2 R$ i1 S% s( P
6.2.3 CGLib动态代理
+ K& o- T" {* T# v8 d+ ?6.2.4 AOP联盟" x& G: w* r. Z: a( w7 |# v$ ?- h
6.2.5 代理知识小结
" u# ?$ Y, ?. o& |+ f' `) r8 D9 a6.3 创建增强类# s- m! p; ?2 t! j1 P/ Z2 e
6.3.1 增强类型2 N$ B9 U- v+ Y R# G' N9 h
6.3.2 前置增强% Q- j- @/ O' h- P* P9 M+ N
6.3.3 后置增强
* {7 }" E8 M; f) _6 n: U6.3.4 环绕增强
% u- j3 O* j; C3 Q6.3.5 异常抛出增强
$ c* r% m0 J3 N' r* Z6.3.6 引介增强" x$ i" v/ F8 P
6.4 创建切面" J: k/ o- M; X' u+ Q
6.4.1 切点类型% C8 V. |7 M B7 E5 l* R
6.4.2 切面类型
( A" ]7 I7 [, k; _/ [1 n* }! v6.4.3 静态普通方法名匹配切面
! C; p6 T {0 B) L4 M" u6.4.4 静态正则表达式方法匹配切面( S2 j* w8 D) M% y2 e4 e4 U) M9 p1 b
6.4.5 动态切面
8 z) q* t; K" H" j6.4.6 流程切面' K2 i9 d: f4 @) m/ H. q" r
6.4.7 复合切点切面
6 Y6 z# |) i9 F7 C- |6.4.8 引介切面
& U1 f1 [) ]! ^' r, l) _- W6.5 自动创建代理
8 _9 D4 Z: y* s/ {: u6.5.1 实现类介绍) N6 W7 R8 I) x, y9 |
6.5.2 BeanNameAutoProxyCreator
* ?0 B8 y# z* x$ F2 \6.5.3 DefaultAdvisorAutoProxyCreator, @, F6 }# |7 ]6 P1 K3 M
6.6 小结4 v6 O# a- G7 U. M1 m% h$ `
第7章 基于@AspectJ和Schema的AOP, p* l2 g; t' x+ ^
7.1 Spring对AOP的支持
" D) l1 ^& k. Q2 L) O$ r- ?; ]7 P7.2 JDK 5.0注解知识快速进阶) `- j3 [8 b3 s. X2 W' ~. _
7.2.1 了解注解5 L5 B4 V2 o* `0 X7 ?) ?0 s6 [7 A
7.2.2 一个简单的注解类
6 P8 D* n n! h, @+ M6 K7.2.3 使用注解! L1 }" P A5 {- Y/ p5 }* y% T$ t
7.2.4 访问注解
' P1 z" S% s* f3 C* X7.3 着手使用@AspectJ' U1 U/ x4 i* p6 |) |- i; d' d
7.3.1 使用前的准备+ W& Z( c/ ]( c' }2 o: T, ]
7.3.2 一个简单的例子
) G X, I$ r, z O$ U/ D+ O7.3.3 如何通过配置使用@AspectJ切面
R1 u- I- l4 b. B% [$ w) k4 t7.4 @AspectJ语法基础' @$ l3 x" n0 o# C1 ~, i: o9 c9 k
7.4.1 切点表达式函数
! b3 J' g6 W0 h: m& t7.4.2 在函数入参中使用通配符
5 Z: C k H, B4 ?- [* K$ q; V7.4.3 逻辑运算符
% X5 [5 |" \* P6 X1 A- N7 [, r7.4.4 不同增强类型* `! k- n& V* y8 ^5 U& s
7.4.5 引介增强用法9 l }0 b0 N" n* c6 u
7.5 切点函数详解& s0 C/ E A) {0 c9 e5 I& c z1 F
7.5.1 @annotation()
6 h$ B! t2 M* N7 \; g7.5.2 execution()
6 Z: B4 Y: [+ `( v3 ? ]' G5 D7.5.3 args()和@args()3 j7 Y. x+ v9 E! s
7.5.4 within(), u& r2 U5 g" J- u; H8 f% f0 ]
7.5.5 @within()和@target()% ^! s/ s6 C2 F! T" s
7.5.6 target()的this()" l# S8 c3 o5 w0 B- l) }/ T
7.6 @AspectJ进阶
7 C; [* f0 @0 O, J# \. r" q( ]7.6.1 切点复合运算" U4 i/ W3 r2 Y! K' O3 e
7.6.2 命名切点& g3 s1 F3 G9 O; U
7.6.3 增强织入的顺序
. b" f! S6 H, n2 ]" l7.6.4 访问连接点信息% `/ B& I6 L+ ~9 }) G0 H
7.6.5 绑定连接点方法入参4 P! L$ a& q$ J) i% {1 x
7.6.6 绑定代理对象! f- H) l4 `/ _. P0 N
7.6.7 绑定类注解对象
1 ~# m9 N* ^+ x) U; B+ F7.6.8 绑定返回值* `+ A+ {* L) g8 C. u
7.6.9 绑定抛出的异常3 ]6 s# }3 H* [9 R% G6 k3 y
7.7 基于Schema配置切面
2 p' r. E/ Q% o% N4 r7.7.1 一个简单切面的配置6 y3 x+ Q* T1 M9 h/ H% m
7.7.2 配置命名切点
1 P" C( k) ]! v" T$ }0 b7 C7.7.3 各种增强类型的配置
7 N9 E1 h* z: O0 U! R0 i7.7.4 绑定连接点信息 n# z/ ]# ?( d+ e9 S
7.7.5 Advisor配置
6 N5 l+ B0 A- i/ [+ K7.8 混合切面类型2 B6 h K- g$ a- R
7.8.1 混合使用各种切面类型" n7 E$ C2 l' G) P
7.8.2 各种切面类型总结3 Z4 P. E0 l6 ~- E- {( V
7.9 JVM Class文件字节码转换基础知识( k3 b& @$ z5 m! R' Z
7.9.1 java.lang.instrument包的工作原理3 N. E r4 ^. X' F
7.9.2 如何向JVM中注册转换器7 Q' N' ~ C% I: ~1 x# B
7.9.3 使用JVM启动参数注册转换器的问题
R G& k1 \5 X" }+ [2 h' `- C0 C' \7.10 使用LTW织入切面1 x4 v! I4 i( K. G' V
7.10.1 Spring的LoadTimeWeaver
( E+ C' `% q! H! y/ g3 r6 ~9 [; c7.10.2 使用LTW织入一个切面
) [: N1 Q% C5 d7.10.3 在Tomcat下的配置
& W1 m1 Z5 ]+ ^- v$ ~ w; c. v1 H, S7.10.4 在其他Web应用服务器下的配置
0 `# G* c/ V3 u4 M# Z7.11 小结. d% L1 k0 X) S& a* {- b5 ^, K& x
; i! I0 F# e" D/ F1 m
第3篇 数据访问2 r; m. n3 ] ]; g8 K# J( L
第8章 Spring对DAO的支持
* _: D v/ ~3 ?' O) t8.1 Spring的DAO理念 Z! R1 D% |8 F; N' @0 E: f% e
8.2 统一的异常体系 k( i0 j2 i1 ]) Z
8.2.1 Spring的DAO异常体系: Q9 X: [9 B p1 _; ^* w9 d. p
8.2.2 JDBC的异常转换器3 I5 Y1 T% `3 F
8.2.3 其他持久技术的异常转换器9 B$ v; k8 @3 Q1 }; j5 s9 M* T8 q
8.3 统一数据访问模板1 C7 w1 _# p% `) R8 J3 V
8.3.1 使用模板和回调机制
3 `$ \+ a% }0 P8 ]1 t8.3.2 Spring为不同持久化技术所提供的模板类& P* K+ N. \* L: B& Z, L" |
8.4 数据源# w3 V% l1 M+ O2 w
8.4.1 配置一个数据源 e; Y1 W! Q: ]: \- o
8.4.2 获取JNDI数据源
, V' B! v% ~1 Y: Z2 {3 \9 p6 X8.4.3 Spring的数据源实现类3 f4 u6 m% A, F7 {- F3 N
8.5 小结
* a, X- D7 j9 ~" ^7 ?$ h第9章 Spring的事务管理
@7 g5 _' } k* M3 c. R& U9.1 数据库事务基础知识! ~. l, G* h7 B
9.1.1 何为数据库事务
^7 w- M6 P9 P9 Q9.1.2 数据并发的问题( s/ u/ s, r$ O' U* m7 m
9.1.3 数据库锁机制
% A$ b, v5 k9 \ x8 a$ o9.1.4 事务隔离级别; n& y4 e& m8 s, y
9.1.5 JDBC对事务支持
1 G/ d! s$ [6 V. w% {9.2 ThreadLocal基础知识
$ b, H- i" H: B9.2.1 ThreadLocal是什么/ P" F* L u# M8 m7 F9 U
9.2.2 ThreadLocal的接口方法& U/ }. l0 D- [5 V4 H) M2 @
9.2.3 一个TheadLocal实例' A# j7 G; y1 X' t) H
9.2.4 与Thread同步机制的比较
8 W' [; v6 j4 I+ u$ @9.2.5 Spring使用ThreadLocal解决线程安全问题+ z+ U3 S6 {& h( `0 Z/ o4 f
9.3 Spring对事务管理的支持
) H+ N P5 J( |9.3.1 事务管理关键抽象
. Z4 _3 s& h: c9.3.2 Spring的事务管理器实现类7 ?6 ^! ?) J6 k; @" w' i
9.3.3 事务同步管理器
: n. Y; O& L/ M9 `$ O% r. G9.3.4 事务传播行为 O7 |+ k& y# b& T
9.4 编程式的事务管理
5 R" i( m& R% a, r+ X9.5 使用XML配置声明式事务
/ f. i' \, v7 @9 z" A9.5.1 一个将被实施事务增强的服务接口! C2 K R5 F7 |" m- w3 T' @9 A2 E: O& c
9.5.2 使用原始的! N: j' S7 Z- @9 J( _' \
TransactionProxyFactoryBean
. n! o x( u+ j' m$ X0 \9.5.3 基于tx/aop命名空间的配置
, L- S6 k( u( `% G6 G2 F9.6 使用注解配置声明式事务& f7 J+ @: d1 i* W3 G2 d
9.6.1 使用@Transactional注解
2 c4 G. H- S$ _1 R" _9.6.2 通过AspectJ LTW引入事务切面8 S: C0 e4 U3 L* {. X: t" d
9.7 集成特定的应用服务器- i. F% W9 r: k3 }0 O
9.7.1 BEA WebLogic9 \; _8 J$ ^+ X5 t. \
9.7.2 BEA WebLogic
Z& u: S' e) e% c9.8 小结3 A- @$ e( u; O8 K; D
第10章 Spring的事务管理难点剖析
+ x# X, {# Z- d1 i' y* Y# X10.1 DAO和事务管理的牵绊. O1 z& l5 Y4 i8 k
10.1.1 JDBC访问数据库9 a) f8 @: Z. M$ c J
10.1.2 hibernate访问数据库
: C2 @! |6 y8 u; h8 F$ `) ~7 v10.2 应用分层的迷惑
( t* I$ h: \& I' |9 q10.3 事务方法嵌套调用的迷茫9 c0 F. q' M0 f# H. L7 Z$ C. D' s
10.3.1 Spring事务传播机制回顾* A9 C' ^4 G% G3 p2 ^
10.3.2 相互嵌套的服务方法5 N, m0 d! ~, n, z& b/ F z+ I
10.4 多线程的困惑
3 Y2 `- s9 j7 e. P6 Q10.4.1 Spring通过单实例化Bean简化多线程问题
4 _7 o8 \4 z. N$ e' g9 [4 E10.4.2 启动独立线程调用事务方法
/ S- v5 m5 v( ?1 _10.5 联合军种作战的混乱
: l9 V7 L3 @# E9 z& ^# z4 r4 J4 d4 g10.5.1 Spring事务管理器的应对
; J" D5 i1 B2 [( y# ]10.5.2 Hibernate+Spring JDBC混合框架的事务管理. {; a: @& Q, O: t9 G r1 r! t. l$ Y: w
10.6 特殊方法成漏网之鱼
# [3 V; p' d* o$ x10.6.1 哪些方法不能实施Spring AOP事务$ e0 h, K8 e; e
10.6.2 事务增强遗漏实例 c. B/ I5 ^7 T. y( l
10.7 数据连接泄漏
- @5 b/ C8 o( Q2 y10.7.1 底层连接资源的访问问题1 @9 V. N8 g9 Q) `: n9 F
10.7.2 Spring JDBC数据连接泄漏) i3 U1 G! S' U
10.7.3 通过DataSourceUtils获取数据连接 `. t! V& M4 K/ t3 T- j
10.7.4 通过DataSourceUtils获取数据连接, w& N. p- S+ E+ Y& [& A: ]% h
10.7.5 JdbcTemplate如何做到对连接泄漏的免疫
' A, L- @5 o; h' R# |* ?10.7.6 使用TransactionAwareDataSourceProxy2 [! N- ^8 P; F; |
10.7.7 其他数据访问技术的等价类9 Q7 i( _0 c1 u
10.8 小结/ h2 `" B/ V- C, B
第11章 使用Spring JDBC访问数据库
% X8 g- w: X, l11.1 使用Spring JDBC8 v2 G) b, |6 O
11.1.1 JDBCTemplate小试牛刀4 p5 b: N, u P# K' p% C
11.1.2 在DAO中使用JDBCTemplate1 ~, Y7 K. o+ L! S- r8 T2 v
11.2 基本的数据操作
4 U. c: n# C8 y4 i- x11.2.1 更改数据
Z) h7 M8 P: a2 F' w( _. z- f11.2.2 返回数据库的表自增主键值
$ y/ c& B; s- @/ [' d0 P11.2.3 批量更改数据, B9 Y" Y2 {9 {6 H- n
11.2.4 查询数据
6 }* M3 N& D2 c( `# G11.2.5 查询单值数据
3 @& [% M5 P* [11.2.6 调用存储过程) W6 E' x/ }% W: v/ N; r
11.3 BLOB/CLOB类型数据的操作
0 g8 B0 H9 Y& G1 G11.3.1 如何获取本地数据连接
2 w2 p5 C. N# n, f! P! L11.3.2 相关的操作接口8 a5 B$ b& v2 c
11.3.3 插入Lob类型的数据& @1 q7 m8 m \0 ]( l* K
11.3.4 以块数据方式读取Lob数据
, l( N3 `" T- r11.3.5 以流数据方式读取Lob数据8 q V. J' b& Y" ]5 ?
11.4 自增键和行集 x( F: `. }! @* O7 Q8 W3 z
11.4.1 自增键的使用6 s# F5 V r1 ^! T# l
11.4.2 如何规划主键方案
8 O7 h4 g% D1 c* Q9 M# |5 J11.4.3 以行集返回数据8 O# B @/ |+ i
11.5 其他类型的JDBCTemplate6 N$ x9 x% G2 z# b* \
11.5.1 NamedParameterJDBCTemplate
, o# c- X- u% y& r11.5.2 SimpleJDBCTemplate+ c3 N9 @5 i+ h+ u: V: d" k
11.6 以OO方式访问数据库
/ B3 E Q9 n" J11.6.1 使用MappingSqlQuery查询数据
, `2 t6 Z; Y5 ]1 c11.6.2 使用SqlUpdate更新数据
7 }1 c7 h4 w1 E/ \! @11.6.3 使用StoredProcedure执行存储过程
# d+ ]7 k& h6 ?. t3 Y4 D11.6.4 SqlFunction类. n: y8 z4 ?6 R
11.7 小结0 w2 e# R/ f* |; h! X' y0 O
第12章 整合其他ORM框架5 ?# x8 q2 R: L( ]: u
12.1 Spring整合ORM技术& `4 }. A$ ?9 U% m$ T
12.2 在Spring中使用Hibernate4 A# M1 r! b5 x# b
12.2.1 配置SessionFactory% @. w0 Y6 B2 y% W* P
12.2.2 使用HibernateTemplate7 B4 k8 S% E( }0 b
12.2.3 处理LOB类型数据
# }4 `7 g2 [3 T3 g$ K12.2.4 添加Hibernate事件监听器/ t6 f( C) t3 p: I
12.2.5 使用原生Hibernate API
9 C7 B/ Q6 {( M: h( z0 q2 j! K/ x12.2.6 使用注解配置
/ K6 W. c8 z* F& t+ ]0 K12.2.7 事务处理
4 ]9 [' y( p6 \% j+ ]; }1 s! d9 r# ~12.2.8 延迟加载的问题* P H0 `* ?+ y3 G' B. J
12.3 在Spring中使用myBatis& w! |. |$ X" d
12.3.1 配置SqlMapClient4 C$ X+ K* c% l! p4 v* y) K
12.3.2 在Spring配置myBatis
5 Q) p; Z6 |# Q; m' i12.3.3 编写myBatis的DAO% X8 M B6 q- q/ [
12.5 DAO层设计
1 D( \2 p# ~0 W2 Z7 t9 q. }0 C" m5 x12.5.1 DAO基类的设计
2 ?3 p7 T! S+ m( A# J4 n12.5.2 查询接口方法的设计
/ y5 [3 F5 n3 Z. Z) {12.5.3 分页查询接口设计; z4 _: m% ?) w( z& V1 U
12.6 小结
4 X2 Q$ ]8 d- ^6 ^ d( {/ q+ a) w2 `/ g, w! }
第4篇 业务层及Web层技术
& n' A" V4 c0 o4 u- M# P4 e第13章 任务调度和异步执行器
1 w. b% o# g! {. v3 A" `13.1 任务调度概述
: ~- e1 d' A2 h+ u, A+ h7 A- ]13.2 Quartz快速进阶
1 ?5 F7 X$ _: J& i13.2.1 Quartz基础结构4 x/ i9 H; b% Z) d$ Q
13.2.2 使用SimpleTrigger/ R* L( y+ O- E- C. c. ^# ]4 t6 J
13.2.3 使用CronTrigger4 D/ K7 I M; u, Q4 }$ h
13.2.4 使用Calendar' P# v( j0 `# j( x; {/ V5 E
13.2.5 任务调度信息存储3 C9 P6 O0 F( k' X! q; Q, z! D
13.3 在Spring中使用Quartz
6 W3 J6 i* n; N; T; z: C13.3.1 创建JobDetail
* h) W: `( z/ f3 g* ^13.3.2 创建Trigger
. d& m4 P2 j2 Z2 Z( W13.3.3 创建Scheduler( B0 v5 f$ v5 ~ c& b5 J
13.4 Spring中使用JDK Timer6 _; e; N! j$ d( V4 f, Q, v
13.4.1 Timer和TimerTask6 J/ q# F( w! X* I; m: q& o
13.4.2 Spring对JDK Timer的支持% B" v: X( D& d( K. G) {9 x% u# h
13.5 Spring对JDK 5.0 Executor的支持$ Y) E* X: h+ _7 P
13.5.1 了解JDK 5.0的Executor5 a& l, X6 ?: S. l1 E( K( X$ _& ?
13.5.2 Spring对Executor所提供的抽象3 G" A. [0 r! ?% o% X
13.6 实际应用中的任务调度0 s" p: c5 @3 k0 f! p1 m
13.6.1 如何产生任务
9 \- W$ }6 Q" B1 T2 }% R( |13.6.2 任务调度对应用程序集群的影响+ d& p& {0 D% g& i
13.6.3 任务调度云
/ R# W% b/ j7 [! f13.6.4 Web应用程序中调度器的启动和关闭问题
3 R6 [; [7 w8 F5 u13.7 小结
b4 P8 L. C2 h4 }2 Q# J第14章 使用OXM进行对象XML映射% B* k3 H6 |, F7 c6 L1 ] {0 b
14.1 认识XML解析技术
( [, e h) ^$ K4 y$ Y# I2 K3 M14.1.1 什么是XML& ^) m1 b' \& H7 n) k5 ^
14.1.2 XML的处理技术' z4 }5 |3 U2 Y) p L- f* ]
14.2 XML处理利器:XStream
& }$ Q! a, h7 x- n14.2.1 XStream概述
3 u" g: J' c. U1 s. i+ n. m+ q3 C14.2.2 快速入门
9 v5 e3 p# G7 s7 ?* r14.2.3 使用XStream别名3 B+ ^+ R! R7 {' x J. D
14.2.4 XStream转换器
) Q. e7 d1 i! ~6 ^14.2.5 XStream注解
7 K0 f+ b2 d0 H3 v; h& D14.2.6 流化对象; w8 Z; y" b5 v
14.2.7 持久化API
0 P( ?) r7 H( W) F3 F14.2.8 额外功能:处理JSON8 B) ~8 O+ s1 w' h0 v K* e5 y
14.3 其他常见O/X Mapping开源项目
# D8 ]4 x6 y& b- \9 e, o% W* v14.3.1 JAXB. h2 E, b& l* h
14.3.2 XMLBeans# M5 z% @' t* A: I( @. z! C& k
14.3.3 Castor1 P* B1 u/ |2 L c' Z
14.3.4 JiBX n1 u' r4 q, g# g! Q; p- R
14.3.5 总结比较2 T) \; ? X7 ? [6 I+ t# J; J+ j( P
14.4 与Spring OXM整合
4 ]* q' L3 J6 |& V U9 R14.4.1 Spring OXM概述7 e$ [7 P' v9 K Q) S0 `
14.4.2 整合OXM实现者
5 p1 }0 Z' j5 l9 B( l14.4.3 如何在Spring中进行配置
! x& b7 a g; p1 F3 N14.4.4 Spring OXM 简单实例1 P5 |8 c" P9 v2 y6 t1 W1 y
14.5 小结, K/ l# F0 d& I4 E7 J1 J
第15章 Spring MVC
i1 D8 x! u: H) m7 b6 V3 E15.1 Spring MVC概述, ^' C, U8 A- d4 T
15.1.1 体系结构% y m$ ]% W2 z4 V+ g1 [
15.1.2 配置DispatcherServlet
1 c4 D: X [- w/ ]5 e* p15.1.3 一个简单的实例. ?8 F2 v6 v5 {. d+ K1 F' T
15.2 注解驱动的控制器: x- g6 Z' \# x1 h; Y! k+ s
15.2.1 使用@RequestMapping映射请求! [: ?* Q" l7 K: B* {) z2 l
15.2.2 请求处理方法签名概述
6 H% r+ n ^6 k1 K4 |15.2.3 处理方法签名详细说明: G/ U5 S$ J" F" v. l
15.2.4 使用HttpMessageConverter<T>) ~3 y3 ? V7 m1 _5 Y
15.2.5 处理模型数据
8 c$ X# B. N, A3 B$ P" h, l( c15.3 处理方法的数据绑定
* V _5 P4 J5 O; r- p1 e+ ]! B15.3.1 数据绑定流程剖析 L. J* Z$ } L* `' e( I" D
15.3.2 数据转换
; e' V+ j( b: a0 k% v15.3.3 数据格式化& H9 u( t$ S; J6 n* T
15.3.4 数据校验8 t7 {. x8 m& `9 w4 b$ g
15.4 视图和视图解析器$ C. M0 H6 G/ {+ T. v
15.4.1 认识视图
5 t1 _* T0 x( b* I7 q! s15.4.2 认识视图解析器$ z! A Y0 Y3 |5 n$ y1 r' k* O
15.4.3 JSP和JSTL# e& _2 Y- L% ^4 }3 W1 ~. ~
15.4.4 模板视图 F3 Z3 x+ k. S% k& E
15.4.5 Excel: ?! V! }# I/ p6 t. X2 D y
15.4.6 PDF2 o& H* t' p0 `/ w5 ]# a
15.4.7 输出XML
+ J$ E9 Y8 {" {" |15.4.8 输出JSON
- W) @7 a" }2 X+ a- I15.4.9 使用XmlViewResolver) ~, p5 m, K: `; Y3 L& _
15.4.10 使用ResourceBundle ViewResolver, l7 i; A* F1 G# G% ]
15.4.11 混合使用多种视图技术* z f0 h5 a1 z) \
15.5 本地化解析
/ c9 A/ b- }" D. J15.5.1 本地化概述4 x/ f! l5 e% U/ s6 ~
15.5.2 使用CookieLocaleResolver
# V: l/ Z( k/ I; F* z2 Y( y$ |3 z15.5.3 使用SessionLocaleResolver
7 e k8 q7 l9 z) ^15.5.4 使用LocaleChangeInterceptor1 n& R! Y5 p- _ Q
15.6 文件上传1 k4 g1 d0 H2 B
15.6.1 配置MultipartResolver
/ r% U' A7 V' D: T15.6.2 编写控制器和文件上传表单页面/ L- B- L [6 t. M9 R4 {. l" |9 B5 f
15.7 杂项: @ `/ G9 T5 e9 m0 E& C
15.7.1 静态资源处理
% y& p8 A+ P( X+ q" r7 U15.7.2 装配拦截器
) \. W2 l0 H9 v I Q% r1 u$ s15.7.3 异常处理/ `+ \( b# ^& Y2 a4 _) _
15.8 小结
/ ^) k2 X5 }, ` N7 X' `5 I
( T! j) P1 x& j第5篇 测试及实战
& _/ t. j) _( P8 c. O$ A8 i第16章 实战型单元测试6 L8 P5 L, P1 ^" I4 l! I$ L
16.1 单元测试概述
0 n4 q. Y- L9 T- G. y) k7 n16.1.1 为什么需要单元测试: w8 {4 _3 P0 h1 X
16.1.2 单元测试之误解; w$ ?7 y* x9 }- D( D# Y- b) a
16.1.3 单元测试之困境4 Q2 s- p, J2 i& T
16.1.4 单元测试基本概念
7 V; B& f8 R6 o1 \. V8 m16.2 JUnit 4快速进阶. `* p. d4 G. q2 P! A& G
16.2.1 JUnit 4概述8 L, b: r6 a0 x: z
16.2.2 JUnit 4生命周期/ O4 ?- `1 T7 m
16.2.3 使用JUnit A% _' E. P- C3 l
16.3 模拟利器Mockito
# A+ a" a& I5 h6 J' M q16.3.1 模拟测试概述
" }+ u7 L/ `+ m6 l+ e) y16.3.2 创建Mock对象
: {8 ?, K6 r S: O6 Y: m4 b16.3.3 设定Mock对象的期望行为及返回值
o+ @1 G) q" j1 {6 _/ M) a16.3.4 验证交互行为2 m' N7 m1 U" B4 ^+ g0 `
16.4 测试整合之王Unitils
! e6 E* A/ G7 z1 i; C- j16.4.1 Unitils概述) c1 n) q% I4 A v
16.4.2 集成Spring! G1 r Y$ N0 t; z$ q' |2 X
16.4.3 集成Hibernate
" D% ]: f4 f/ G8 \16.4.4 集成Dbunit# m0 e: E8 K% ]8 o1 J1 h) W# X
16.4.5 自定义扩展模块
: y% u% M& o) j( B r16.5 使用Unitils测试DAO层
5 W5 g1 l' N1 x% V& P16.5.1 数据库测试的难点
, @6 M h: _# J7 t16.5.2 扩展Dbunit用Excel准备数据
% P( T( w2 ~5 R' w' L. D# B16.5.3 测试实战
' W6 o' c1 `, n- U. j2 t16.6 使用unitils测试Service层
8 {( ?0 L% `5 j+ ^16.7 测试Web层- e* k/ O+ h0 x% h K
16.7.1 对LoginController进行单元测试0 d$ J: w6 o+ Q; N3 P
16.7.2 使用Spring Servlet API模拟对象 n* o. ?1 X, m; ^# g! C
16.7.3 使用Spring RestTemplate测试
E; Q1 s; G/ n16.7.4 使用Selenium测试1 c" R$ \" O- b) l% \
16.8 小结8 k5 O! R" }' C: D
第17章 实战案例开发
! \/ \6 m5 T9 Y" l2 H; B, `) ]17.1 论坛案例概述
# d3 G; @; p* F2 K0 I- z' `' Z; z17.1.1 论坛整体功能结构
; U: O1 B8 z0 F2 r5 K' V17.1.2 论坛用例描述1 l7 q F; v/ Z$ O6 x
17.1.3 主要功能流程描述 u0 @" s" E( q. }) o7 j+ w
17.2 系统设计
* h/ t, s* G! N, W% N) u17.2.1 技术框架选择& f2 |& x+ Q0 L! i
17.2.2 Web目录结构及类包结构规划
( g* y h# T% D; u17.2.3 单元测试类包结构规划
; o5 s3 L* u" Y% n% N# f17.2.4 系统的结构图+ ~9 e; B, }. E( |3 `* G5 `3 K
17.2.5 PO的类设计
. {) d( |4 O0 M( ^17.2.6 持久层设计. D0 S S+ v2 ~& H' Z
17.2.7 服务层设计
- w) U& `; v* E t4 B" o17.2.8 Web层设计* f$ P* A# g v* [( {, l: u' e3 u
17.2.9 数据库设计- H/ @9 k. |' `# r$ \: p' Z
17.3 开发前的准备
2 m/ j- h/ D7 V- N& m2 ? C17.4 持久层开发
5 [9 H7 Z) c. n! R7 m1 A& _9 R17.4.1 PO类
1 M, o7 Q% n' ~8 m: ~ W6 }17.4.2 DAO基类
( \2 S& V8 n4 g! M; @$ P17.4.3 通过扩展基类所定义DAO类
, ?' s6 c: J& }17.4.4 DAO Bean的装配' s: t$ G- _ ~6 [
17.4.5 使用Hibernate二级缓存: K$ {! R3 L1 f+ @4 C. A
17.5 对持久层进行测试
. [+ ~. P O/ f* ~+ V. n' o17.5.1 配置Unitils测试环境: }3 E3 C- f. Q5 ]5 G* L: U
17.5.2 准备测试数据库及测试数据4 J; t: M2 S* G: G) X
17.5.3 编写DAO测试基类2 \& N( m; p1 I& I4 i: ^+ Q" C
17.5.4 编写BoardDao测试用例
0 Q) v g1 V9 c& ^, ~' M7 h17.6 服务层开发/ \3 }5 P+ V; U% H4 a0 e5 E
17.6.1 UserService的开发0 ~1 G3 _4 _: H* M
17.6.2 ForumService的开发6 R% B; I1 D* d8 B
17.6.3 服务类Bean的装配
1 j1 B' q2 W9 Y) Y( {; F17.7 对服务层进行测试4 m- T2 L( E1 x3 r
17.7.1 编写Service测试基类
+ ?& H$ R* u, r" R8 X: E17.7.2 编写ForumService测试用例
! q* H$ N. r3 x4 p4 H$ Y' R( n17.8 Web层开发. E- z7 w) n% m/ D9 C6 i8 s
17.8.1 BaseController的基类
1 G# p+ A A4 c! v# Y9 O4 Z17.8.2 用户登录和注销5 Q* s( r( m. O* c* u
17.8.3 用户注册
0 X1 { j" b9 n! b/ ? L17.8.4 论坛管理/ y( d6 X% K9 h8 S3 q# X( ?2 p- I
17.8.5 论坛普通功能0 v+ U* F# w2 y5 K
17.8.6 分页显示论坛版块的主题帖子( L0 q5 H* K4 i$ r- A5 `4 ^ B" P
17.8.7 web.xml配置
+ A1 A9 b: \2 Q) u' j9 Z) {17.8.8 Spring MVC配置+ y, U0 g+ {# Q; C! c* }/ I
17.9 对Web层进行测试
5 j# K0 g& h% G4 {% l- t17.9.1 编写Web测试基类8 c& {1 i! Q4 r1 j" N' G
17.9.2 编写ForumManageController测试用例
6 ~! U! I v* c17.10 部署和运行应用/ ?8 [2 Q( M6 d: l
17.11 小结
8 s6 ]$ e5 l; s* f0 B9 w以下内容详见本书配书光盘:
$ U# d, ^! X# S附录A JavaMail发送邮件
5 W6 e( s% F: i8 Q K/ |5 b* q附录B 在Spring中开发Web Service
* T9 `( N, T, ?" k2 R/ a: H6 o: @+ K. e7 q8 w* `" u
Spring 3.x企业应用开发实战(高清版)4 A% |4 q$ p5 X$ x' G
/ y8 b3 o7 ?. V6 h0 c- ] ?# B( X3 x: m- }' m! c( `
|
|