|
该用户从未签到
|
揭示内幕、深入浅出" R$ b( Z& ]! t3 @2 N( `: ~
同步更新、与时俱进
% T+ d9 |) Y' F4 t! i; O突出重点,淡化边缘8 R- l2 H5 b/ b
理论透彻、面向实践$ O2 x1 Q8 P+ P! r2 X
代码简洁、图例丰富
( N5 c2 W9 w% j e, x# w/ B/ q& w& N/ [注重趣味、轻松阅读' Q* {7 A# w6 {5 q
相关知识、一网打尽& N# i. H/ z7 M* y' f
历时一载、倾力打造
2 i: A. [0 F+ ~# p3 |=================0 l$ Q6 E9 i' r( y
spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为java领域第一开源平台的翘楚地位。
' q3 U" ?) E& ?) u) |, m Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升应用开发的优雅性。( L- J5 g* Q2 \0 o$ E! E! N# j
《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。此外,本书重点突出了“实战性”的主题,力求使全书“从实际项目中来,到实际项目中去”。
$ [& p4 L" _( J, s===========================================================================================0 S* U8 W1 Y4 z; x q
第1篇 概述
" y/ G) ~1 V) U第1章 Spring概述2 W- C6 N. _; D/ K, q; k9 E3 C' {
1.1 认识Spring
7 o' p m3 V$ [) f N1.2 关于SpringSource6 w. W# B/ y2 {( O
1.3 Spring带给我们什么7 W+ n8 x- F8 f8 a: x+ u B0 q
1.4 Spring体系结构
! v& q6 O( z- K8 Q1.5 Spring 3.0的新功能
. B; g" w' ^+ a; D5 y' j+ z) o1.5.1 核心API更新到Java 5., x9 R; x0 @4 Y9 ^/ C) a$ u- s
1.5.2 Spring表达式语言
: E' C( \# M/ i( n4 z) O1.5.3 可通过Java类提供IoC配置信息6 ~+ z9 t$ g: Z; [
1.5.4 通用类型转换系统和属性格式化系统0 f' h1 K( S2 ^, s H( f
1.5.5 数据访问层新增OXM功能 `, R! n* }5 q1 f" Z
1.5.6 Web层的增强& c& f# P B1 q# H0 O
1.5.7 其他
, K& d* j4 Y# h) P* @& L1.6 Spring对Java版本的要求
! {( _7 b9 B% f, c& n& A1.7 如何获取Spring7 a2 C# p9 \: H( }+ c
1.8 小结% X0 }) |: K+ H7 e
第2章 快速入门
- P9 H, f/ g" H- s" {/ C2.1 实例功能概述0 ^3 `& I) y. h8 x
2.1.1 比Hello World更适用的实例
4 i( q" b9 u% j2.1.2 实例功能简介5 _5 n5 o c7 ^& b/ [8 D
2.2 环境准备
# R6 n1 O8 \ q5 x+ v9 W6 S2.2.1 创建库表' B( }& R, d. H: j5 M. H: ?
2.2.2 建立工程6 s4 O. P! H/ |4 J5 @/ t
2.2.3 类包及Spring配置文件规划7 c7 R! b8 j# B+ k- J6 T% T
2.3 持久层
, o |9 s' `) s5 @6 h2.3.1 建立领域对象# u( P( R0 t7 L1 ~* Z" M0 U! @
2.3.2 UserDao3 O# T% B& v {, G% c/ X+ K, {
2.3.3 LoginLogDao
/ ^+ q9 q% H J7 c. E2.3.4 在Spring中装配DAO/ v9 C. } E% c' E }. m
2.4 业务层
2 x/ T! v, ]' V% q; W" s2.4.1 UserService( u6 T) z% {. G7 k! M
2.4.2 在Spring中装配Service
% [: N$ V, _8 ^; R2.4.3 单元测试2 O) @( P7 e9 }4 E
2.5 展现层$ t2 x, g# O. F6 d8 A6 j# E
2.5.1 配置Spring MVC框架
. N8 a A9 X4 A, V2 X2.5.2 处理登录请求
/ X' {- e: }+ W1 ^4 \2.5.3 JSP视图页面) O0 m$ Z3 Y4 E3 k! E& N
2.6 运行Web应用! p1 F$ T3 b# W5 b
2.7 小结
" F S B* D0 t! e8 h; A2 g3 Q( P- ]* n! w* ^2 v
第2篇 IoC和AOP& Z# u# X5 x- s% q( \
第3章 IoC容器概述
5 x' P( O6 X* Z3 z" v3.1 IoC概述: @! x; N$ M. M/ c' ]
3.1.1 通过实例理解IoC的概念
( P( ~0 m+ {8 v# F% V7 Z3.1.2 IoC的类型
+ d& K5 j4 Y9 C" D1 U) }9 c8 e3.1.3 通过容器完成依赖关系的注入
' M0 A/ a D) h! i; x3.2 相关Java基础知识
! h/ Z! a/ U& v5 _' C! C6 N3.2.1 简单实例6 W4 e' r1 e8 S' {7 k5 b; |
3.2.2 类装载器ClassLoader- m7 P7 |9 o2 J4 ?' y* T! i( q
3.2.3 Java反射机制
) w- |; _' ?- N# B& e3.3 资源访问利器6 T' W5 j4 X: ]# y
3.3.1 资源抽象接口) B5 H3 D; K `1 o" k
3.3.2 资源加载 B! `8 G6 o. h# P0 o: K
3.4 BeanFactory和ApplicationContext
% H2 Y# A* ^0 f; }2 ^9 ~, O3.4.1 BeanFactory介绍
; _4 \+ }$ ^$ z: k2 N i3.4.2 ApplicationContext介绍" ~; T0 y" [6 X N( C8 Z/ x3 @) i
3.4.3 父子容器) V* e+ [8 Q" n0 F
3.5 Bean的生命周期
5 j. N2 j8 Q/ V3.5.1 BeanFactory中Bean的生命周期
# b J! Z8 [; j5 s7 \3.5.2 ApplicationContext中Bean的生命周期: Q& I7 R! ~$ m9 n3 j7 X1 f
3.6 小结
C5 ]. ]* v* C9 V: m* f第4章 在IoC容器中装配Bean2 {9 g! b, [- M8 ]" S0 _
4.1 Spring配置概述; M% E5 F9 P. F# w0 W2 \
4.1.1 Spring容器高层视图
7 E( k, T8 P4 z6 g/ I" u# n0 T3 ]4.1.2 基于XML的配置
9 ?% V9 R" H7 k+ g* O4.2 Bean基本配置2 S! f, K& i* C# ~+ S
4.2.1 装配一个Bean
" \, o' b0 N9 ]) s, [9 h4.2.2 Bean的命名, ?5 [( f& q3 q& W! T
4.3 依赖注入
$ [0 _+ d5 o/ @4.3.1 属性注入
" w2 l4 W" q1 i6 L& Y4.3.2 构造函数注入* {% f+ ?$ B8 t5 S
4.3.3 工厂方法注入
% X! s \! g5 N+ F/ n- }* ~; Z: R4.3.4 选择注入方式的考量1 I! W/ b9 A" Y' W4 x+ r
4.4 注入参数详解6 b) r% d* L1 Y4 a6 u
4.4.1 字面值- P) e' f; x8 Z% t9 z( B
4.4.2 引用其他Bean
& A, b2 m) a- `3 H3 z0 g7 h2 j4.4.3 内部Bean
. W' Z( ~4 y: _8 L4.4.4 null值
" e: {7 ]- C+ `9 F4.4.5 级联属性* H5 T: C0 F8 q, \8 {
4.4.6 集合类型属性
& X& Y7 K1 \1 a- Z" K* ]4.4.7 简化配置方式
8 g1 x6 p" Q$ M% ]* G) ~/ w, y4.4.8 自动装配% x0 z2 h0 P8 L/ G
4.5 方法注入* T3 h/ c/ F6 F: Q
4.5.1 lookup方法注入
8 Z9 g+ e) x6 _$ i( I! z s4.5.2 方法替换
; w4 g0 |; A B) M- d4.6 <bean>之间的关系" j* i0 s5 _$ N0 k+ R2 f z
4.6.1 继承9 H8 D) g+ r5 i+ w0 A A7 w h; ?
4.6.2 依赖
; v: D; l, @+ V5 Q! D# F- z/ v+ R4.6.3 引用, C% W9 T# @' C3 s( y* ~
4.7 整合多个配置文件$ `; A r4 E( \% X- L' U- Y
4.8 Bean作用域4 M) `2 N2 ?5 p
4.8.1 singleton作用域
; @5 \- I6 ~8 {3 Y8 W4.8.2 prototype作用域$ s! y) d+ P! m# S1 t
4.8.3 Web应用环境相关的Bean作用域5 R0 L* \+ Y" ~0 D2 V
4.8.4 作用域依赖问题
3 L9 \4 y3 d" { w( U4.9 FactoryBean! a7 A# ]% N( r; V& f
4.10 基于注解的配置
" O0 E0 o7 L3 y1 P4.10.1 使用注解定义Bean# H$ ]6 Y1 W+ q4 {+ @( P
4.10.2 使用注解配置信息启动Spring容器* J' j! N: g5 \/ Y; A9 K
4.10.3 自动装配Bean4 S1 [+ ^. ]( ]2 _2 d
4.10.4 Bean作用范围及生命过程方法* n; l- Z# R2 }3 j/ p6 h X
4.11 基于Java类的配置% s! e- Z; a! V8 b( ^
4.11.1 使用Java类提供Bean定义信息
0 I2 ?' Q5 e0 O! H- C7 |3 Y4.11.2 使用基于Java类的配置信息启动Spring容器
% |' z' }# Q/ K# Q5 H. a( P( v: O4.12 不同配置方式比较
# e& A: t% ]+ d$ j4.13 小结
$ m2 g( {( `. D% y$ V5 F第5章 Spring容器高级主题 ]2 K6 I. E* ^
5.1 Spring容器技术内幕/ t1 v# @& [5 A8 j) c) H6 }4 {1 S% ]
5.1.1 内部工作机制
* V3 J; X& @& t2 |8 E9 W* B5.1.2 BeanDefinition h8 [- {+ [2 _4 H, Y: b; s) U; O
5.1.3 InstantiationStrategy1 J, O; Z( T* i/ \3 \& S8 A# E% r q
5.1.4 BeanWrapper. X) {8 a9 k& K" }0 ?
5.2 属性编辑器
) W: r9 o3 J9 L- j3 e t5.2.1 JavaBean的编辑器
% Q# G/ t2 m1 v5 u$ X( a; x5.2.2 Spring默认属性编辑器7 X0 `" b7 o5 e/ X
5.2.3 自定义属性编辑器
/ r7 t Y" d z7 L7 p5.3 使用外部属性文件8 w, c ?8 O! g9 V' _+ P
5.3.1 使用外部属性文件
/ u0 B! Z% S: i% z ?# W5.3.2 使用加密的属性文件
' o7 e/ g* g9 t5.3.3 属性文件自身的引用 ~; V) ?1 N D2 u& w% C8 N4 }
5.4 引用Bean的属性值2 X; x7 c: `' C/ [
5.5 国际化信息: M7 S) Q) Z; [( ?8 y% s
5.5.1 基础知识+ R- U) Z6 y0 Q# c+ G2 w& z$ z
5.5.2 MessageSource; ^/ o; K- {9 X
5.5.3 容器级的国际化信息资源
' O U1 M9 @; b, M3 n5.6 容器事件- C" Y0 w2 @' D* k' R
5.6.1 Spring事件类结构
* }8 ]( Y5 ^- q$ L) H' c9 K5.6.2 解构Spring事件体系的具体实现
" h, L1 t2 G) O$ e/ m5.6.3 一个实例
1 N* F z) k/ g" V2 ^ j7 m5.7 小结
0 x# f1 c8 a! U4 L% }第6章 Spring AOP基础
1 v9 O+ O- B. I6.1 AOP概述: n' ^$ U0 g" r' a, e& h8 f
6.1.1 AOP到底是什么# g0 A2 r+ A( @4 C
6.1.2 AOP术语
# p5 A# c7 p' e+ N% k8 ]# k+ V% h' W6.1.3 AOP的实现者# A! B. Z- S, `1 ^+ y( j, c
6.2 基础知识
w8 I( Z! F% Z; U) O$ ?" b* J _6.2.1 带有横切逻辑的实例
) e: y1 Y/ F4 S! ~* u6 [# U$ P7 u8 N6.2.2 JDK动态代理0 p# b2 f! C7 o' `2 `
6.2.3 CGLib动态代理
: ?$ l! B- Y/ X4 b9 j5 k& P6.2.4 AOP联盟
% [5 @7 G9 a" _! W1 \: L6.2.5 代理知识小结
7 E7 a1 b7 {! t+ b: I3 e6.3 创建增强类
! s/ }8 s7 M& A9 q. \0 M6.3.1 增强类型3 C M" ^# {0 S$ u7 R
6.3.2 前置增强
: D/ j( c9 D& }8 d$ c" ^' m6.3.3 后置增强
& _5 H# l+ J, h6.3.4 环绕增强
* j, \* x& B" y7 R; p1 {6.3.5 异常抛出增强
. A R* d& S7 i6.3.6 引介增强
6 S) m! L5 u7 L: y8 H$ y6.4 创建切面
& t: R+ O5 ]+ ^6 D0 d4 s E+ r; \* ?6.4.1 切点类型2 y7 R/ T0 G3 ]9 U! J! b
6.4.2 切面类型# ?6 X6 |* T" g8 x- u
6.4.3 静态普通方法名匹配切面
) S) \/ O& k+ x- T: u1 D6.4.4 静态正则表达式方法匹配切面
0 m& x8 P- M& s; I0 V" I6.4.5 动态切面0 Y! R5 Q% b' V" M( [# O
6.4.6 流程切面
8 u, b( C$ \* Q$ y& Z" s6 v( Z; p* j6.4.7 复合切点切面7 A" s! u+ s- k! F# y
6.4.8 引介切面 w1 x6 u1 N% W+ i& W: H- i; Z1 w% {
6.5 自动创建代理
4 n: z" l8 S% ^' O/ i i6.5.1 实现类介绍; q4 C( }, r( Z# v3 [4 m! W2 |
6.5.2 BeanNameAutoProxyCreator) M/ U7 i' [7 ^2 p3 a
6.5.3 DefaultAdvisorAutoProxyCreator3 {1 N9 a" Y9 M# a
6.6 小结
- n3 ~4 T# d0 a6 p. B8 G第7章 基于@AspectJ和Schema的AOP ?2 i( |5 q0 i, }
7.1 Spring对AOP的支持
' v; I( q/ O/ @5 Q" G/ m3 L7.2 JDK 5.0注解知识快速进阶5 B- x& N; ?! |. v8 P z
7.2.1 了解注解" `" g3 D6 S# ], z& T4 ?+ i
7.2.2 一个简单的注解类5 p6 N* `3 [* B# [
7.2.3 使用注解7 |9 F$ Z G. m l
7.2.4 访问注解
2 P) i7 y# `4 F2 N$ n7.3 着手使用@AspectJ$ C/ L) G* b h& w9 R6 H6 r4 M
7.3.1 使用前的准备6 z$ g8 _0 z/ e1 U' V) B( k
7.3.2 一个简单的例子0 `" F* n2 D, |2 J8 c
7.3.3 如何通过配置使用@AspectJ切面7 M `' u! J8 m8 R; c1 M
7.4 @AspectJ语法基础0 ~ s+ E1 h% O9 Y+ n
7.4.1 切点表达式函数 u& }* s, u8 U- @; m0 _- b) W/ b
7.4.2 在函数入参中使用通配符# R3 @( Q/ u; q0 H% C; P' l
7.4.3 逻辑运算符8 w( n+ j) U* F7 |9 t: _
7.4.4 不同增强类型
5 k% b+ y9 J$ z7.4.5 引介增强用法
0 Z2 t; g8 r9 d6 }' `7.5 切点函数详解
& p+ T. q' L. B2 n( {7.5.1 @annotation()7 e) l1 o- ]! \9 [- Z& x
7.5.2 execution(), s4 e* B, Z S
7.5.3 args()和@args()6 Y+ E; s4 f( U5 V3 g/ N( Q
7.5.4 within()
! s6 j; Q( T5 C' a7.5.5 @within()和@target()
0 ^: |6 m3 } q O" v `+ O7.5.6 target()的this() x9 _, M) |6 W$ D1 g- c
7.6 @AspectJ进阶
6 b/ P; V& z% f7.6.1 切点复合运算
$ a* P" i% ~) |7.6.2 命名切点/ _2 p( A+ z* }1 c& C
7.6.3 增强织入的顺序1 M8 _1 x5 `1 Q' h9 |' e9 M
7.6.4 访问连接点信息
2 i ?. h$ ~ N2 I% h2 @7.6.5 绑定连接点方法入参
, @7 c+ N6 f, m7.6.6 绑定代理对象 T9 X4 z/ @: d0 l$ `" C
7.6.7 绑定类注解对象
% d& \: l: P" k; V7.6.8 绑定返回值9 H$ I: s& h! X- `5 A! x `- ?, ]* [# U- [
7.6.9 绑定抛出的异常+ J* R1 x! u; X$ `3 B& _
7.7 基于Schema配置切面' n& ]; {0 a% c: l# e) F* }: V
7.7.1 一个简单切面的配置6 t M+ |0 S3 Y" w6 o$ A6 M ]
7.7.2 配置命名切点
6 ~8 N) s. L# \5 i( V) A$ w( Y4 u7.7.3 各种增强类型的配置
) R5 H- `" i# y+ t7.7.4 绑定连接点信息$ {3 a6 D. S5 B
7.7.5 Advisor配置) j9 C; F) P& Z# Q" k% @6 z
7.8 混合切面类型
* V R( f6 `4 r7.8.1 混合使用各种切面类型
. F- n' _/ X, w) Y) ~/ `5 P7 Z7.8.2 各种切面类型总结
& K5 S3 m& r8 I* Z7.9 JVM Class文件字节码转换基础知识4 O7 ?- W: M/ K
7.9.1 java.lang.instrument包的工作原理
: ?6 P- i$ k$ G" V4 q5 s# H& [7.9.2 如何向JVM中注册转换器
% v3 {+ z" z( G6 P% h8 u6 ~& y7.9.3 使用JVM启动参数注册转换器的问题 r5 K0 D. r: W) p2 D
7.10 使用LTW织入切面% g$ @" s% v2 h. g3 t* w5 |
7.10.1 Spring的LoadTimeWeaver# G# a0 o! l9 ^" l0 L
7.10.2 使用LTW织入一个切面9 w, u" X! s5 t( d [& @$ Y; W& N
7.10.3 在Tomcat下的配置
[( V' ]& H" B" @' H+ P7.10.4 在其他Web应用服务器下的配置6 ?* |6 l) `" ^& u
7.11 小结& z, N8 a1 g( a; j" C8 |7 E
/ |4 Z: K6 M7 ~8 S& p: }3 k
第3篇 数据访问
5 n, J2 q9 y& ?$ J% y第8章 Spring对DAO的支持
8 h& v3 f9 n' ?: E% V. E1 `0 p8.1 Spring的DAO理念
- \6 Y S" H9 p1 \- A8.2 统一的异常体系
; `" g: A3 M( G% M) U; k8.2.1 Spring的DAO异常体系
; j( O/ h* y+ {" O& `2 [' D7 V$ E$ i8.2.2 JDBC的异常转换器
0 y1 [4 P9 R+ {8 a8.2.3 其他持久技术的异常转换器" H* y# J0 T: b, A) [3 Y0 R7 x D
8.3 统一数据访问模板3 `- I6 R* ~2 Q) K! z4 T
8.3.1 使用模板和回调机制- m, z4 \/ o+ w4 M' w$ W( R
8.3.2 Spring为不同持久化技术所提供的模板类; T8 b" F3 l0 G
8.4 数据源
8 I3 y! q9 z3 v) m z8.4.1 配置一个数据源9 \. r4 r, M2 \ ]: i- |/ T3 i
8.4.2 获取JNDI数据源
V5 p- v3 t: {" e+ D" j5 h8.4.3 Spring的数据源实现类1 }, y& V* t Q) T; z
8.5 小结
) \! B# ^: d# W% F第9章 Spring的事务管理
* u% v' A) ]* K. ^1 L V% C9.1 数据库事务基础知识
# Z5 I' _0 [" Z. I9.1.1 何为数据库事务
: P j! ?5 R$ s" U0 c, u) r- s9.1.2 数据并发的问题9 C4 t9 j& s& T; B8 P8 a! G
9.1.3 数据库锁机制
8 W# P: H I5 b1 U9.1.4 事务隔离级别
7 z2 f5 b4 q4 I$ Q i1 _$ d3 E! Y9.1.5 JDBC对事务支持) I: o7 r0 V) L8 o
9.2 ThreadLocal基础知识
+ e. \, H5 B' _0 p9.2.1 ThreadLocal是什么
& }! C; n* q( F" z; r) F7 p9.2.2 ThreadLocal的接口方法5 z- A7 ]% K- ?) P" ?! z( j
9.2.3 一个TheadLocal实例$ i4 d9 V0 b% z# I3 d
9.2.4 与Thread同步机制的比较
- l: D+ J8 A' z9 R$ L1 z! E9.2.5 Spring使用ThreadLocal解决线程安全问题
4 k* r: I4 A# e( v9.3 Spring对事务管理的支持2 T$ }( e6 q* l0 ~% O
9.3.1 事务管理关键抽象
1 i( [* X2 g6 x+ Q8 p! F9.3.2 Spring的事务管理器实现类
2 Y4 g: Z( S; M1 T( ?4 M" _9.3.3 事务同步管理器* ~) `1 f$ V, C l2 p5 l( v
9.3.4 事务传播行为% S) h; q+ Q1 [- T, a
9.4 编程式的事务管理
4 r4 B9 ?! b u4 g9.5 使用XML配置声明式事务& M. z: L; N; C7 b# F8 U3 Q9 I
9.5.1 一个将被实施事务增强的服务接口& S; v; @% }0 ?% c8 {
9.5.2 使用原始的' ?6 z4 d% G+ q5 J- @
TransactionProxyFactoryBean* T0 D; B1 K" [' D9 @* [. c1 e
9.5.3 基于tx/aop命名空间的配置% Y" u& R2 x6 }, a* }/ ?
9.6 使用注解配置声明式事务% g2 G0 u) k7 q) `8 O, d
9.6.1 使用@Transactional注解, H8 e/ _. d3 m! m; y [" x, m
9.6.2 通过AspectJ LTW引入事务切面
( Q) C- h/ d {/ a, ]6 V% }9.7 集成特定的应用服务器( R. f2 a) l* M% X; ~/ W! P
9.7.1 BEA WebLogic- T' b; z) R0 E% V# D$ \
9.7.2 BEA WebLogic
, P1 \" y6 Z4 g- f7 M3 O9.8 小结
% G% U' d: l/ K0 t: J" \4 p1 M# A第10章 Spring的事务管理难点剖析
7 G4 X* y; e' }& ?6 j5 B10.1 DAO和事务管理的牵绊
3 Q5 H! u, n5 G10.1.1 JDBC访问数据库
_8 Q" ^9 r% M* O& t0 P n10.1.2 hibernate访问数据库
" z1 ?( v# G2 A5 Y! I, y10.2 应用分层的迷惑% J! |' L2 T" G* t; s- c
10.3 事务方法嵌套调用的迷茫
( q6 O! U- f. n6 t* P10.3.1 Spring事务传播机制回顾: o; b8 y; S- t& @" q# O
10.3.2 相互嵌套的服务方法
% z! A( a# t. `0 } n10.4 多线程的困惑7 s3 N, x1 `9 H1 X
10.4.1 Spring通过单实例化Bean简化多线程问题
! C0 e/ n$ |" f+ c1 ?10.4.2 启动独立线程调用事务方法
5 W8 x1 T9 T! E10.5 联合军种作战的混乱
% E: C' K* J9 K$ M10.5.1 Spring事务管理器的应对
' f7 r2 k# H0 z [- P! h- J10.5.2 Hibernate+Spring JDBC混合框架的事务管理! }# v) c! v: t+ E
10.6 特殊方法成漏网之鱼
! X! l8 a% D4 D2 @& Y5 l+ u10.6.1 哪些方法不能实施Spring AOP事务2 U- _+ x: M6 X. s
10.6.2 事务增强遗漏实例, F2 i1 R y+ P5 m
10.7 数据连接泄漏
`+ J* F8 k6 J6 f+ a% |10.7.1 底层连接资源的访问问题0 g7 o& N. a; u
10.7.2 Spring JDBC数据连接泄漏7 X0 @4 M6 I* H: U9 |5 _, i- h! w
10.7.3 通过DataSourceUtils获取数据连接
' @$ S* F1 p8 A6 W10.7.4 通过DataSourceUtils获取数据连接
1 j* v1 k& c( t4 L1 s0 F' t6 n2 `10.7.5 JdbcTemplate如何做到对连接泄漏的免疫
- ~7 e. b- x; r% J" U# k10.7.6 使用TransactionAwareDataSourceProxy
/ W p/ Q' S3 H8 i2 l% m10.7.7 其他数据访问技术的等价类: g1 `: z |" t$ w4 h
10.8 小结
! T$ _& T ]: f1 e* m2 R第11章 使用Spring JDBC访问数据库
) s6 l8 Y1 K8 z% R. x& M11.1 使用Spring JDBC
7 ?5 `, J2 V4 _" l/ A0 y11.1.1 JDBCTemplate小试牛刀" {" J* H: \+ k7 y3 w2 F
11.1.2 在DAO中使用JDBCTemplate
7 |$ S! y9 P- g& n11.2 基本的数据操作
; h7 d* h z" H11.2.1 更改数据5 B* o! n9 r+ B& R# J7 m+ B% l
11.2.2 返回数据库的表自增主键值; q) h3 s9 R7 [) R
11.2.3 批量更改数据
$ y- R$ t! U$ B% w/ d& }11.2.4 查询数据3 E v' A" h5 E8 ~
11.2.5 查询单值数据5 ~0 a1 N7 J* N% \7 T
11.2.6 调用存储过程
' H, A( r- _' k( d11.3 BLOB/CLOB类型数据的操作. ?0 m4 u: j d0 T3 x8 e
11.3.1 如何获取本地数据连接$ }0 b; S! r" O3 _; x$ w
11.3.2 相关的操作接口! P5 Y* A$ r4 N1 @
11.3.3 插入Lob类型的数据+ @$ b6 j! S$ F# o+ ^0 R
11.3.4 以块数据方式读取Lob数据
* _% a+ V+ |* v- t11.3.5 以流数据方式读取Lob数据
% {: l! r1 e) U A" P. v11.4 自增键和行集 {# S1 h' q# D k" X- W! d6 o7 ^
11.4.1 自增键的使用8 w6 O/ Y; [, o( X" ^( f
11.4.2 如何规划主键方案
$ \$ V" w$ v" b11.4.3 以行集返回数据
. i3 y( o$ f) }* K2 ~11.5 其他类型的JDBCTemplate
' C- a5 n5 Y) e5 X6 N# K( g8 r11.5.1 NamedParameterJDBCTemplate
8 v# j; O8 f* \4 t: F2 q( d11.5.2 SimpleJDBCTemplate7 z% u1 u8 E. h
11.6 以OO方式访问数据库+ w0 K& y) K0 \% ~4 a
11.6.1 使用MappingSqlQuery查询数据) R. B7 H6 V, F. d
11.6.2 使用SqlUpdate更新数据! a$ Y( O) c( P& M7 v2 ?! e% l
11.6.3 使用StoredProcedure执行存储过程
: J! i7 ^1 m [" q, l* m8 Y11.6.4 SqlFunction类6 ?' ?* T# R+ K: D
11.7 小结- d9 {- m# W S
第12章 整合其他ORM框架; S' s# ^3 H: ?9 n
12.1 Spring整合ORM技术
, I4 ?9 a0 n/ F7 h* }+ y, K12.2 在Spring中使用Hibernate
9 c( {( G5 y1 N7 c) ?12.2.1 配置SessionFactory
! G: f9 _6 t5 s! @12.2.2 使用HibernateTemplate
6 _2 G( r: q6 B1 D12.2.3 处理LOB类型数据3 b C. A d, W) q7 C& |
12.2.4 添加Hibernate事件监听器4 E5 ~ m5 S$ k2 p3 J- s7 X
12.2.5 使用原生Hibernate API; r- B' ~2 z+ K- U, q; G$ f
12.2.6 使用注解配置, A) T& f. R* [# Z y' h
12.2.7 事务处理
/ e4 x% Z$ p4 f: ~12.2.8 延迟加载的问题
# b7 ? n0 v5 C12.3 在Spring中使用myBatis& J& S/ w- s6 P# W+ m* i) I! |
12.3.1 配置SqlMapClient( o l0 q6 F5 j2 J
12.3.2 在Spring配置myBatis
% I" j! t+ s4 L6 B# @; N12.3.3 编写myBatis的DAO) R5 Z8 E! x+ S& |1 o1 F* q
12.5 DAO层设计
! _( A( G! F7 @5 G- p3 y% F12.5.1 DAO基类的设计/ ?% C5 A# {! |: l: s
12.5.2 查询接口方法的设计! e* }/ ?, b- s3 ~9 A% a R% b
12.5.3 分页查询接口设计6 v% L9 d. z, U! `9 X9 D5 D5 S$ k6 u
12.6 小结
i1 X4 K. y$ m& L$ @9 k1 R% T/ y4 z8 V
第4篇 业务层及Web层技术
* _7 y* v/ @$ |, o! A0 Y6 L第13章 任务调度和异步执行器# j3 z" _) ^0 A8 \7 c
13.1 任务调度概述
$ N% d" K. K/ i/ Y- ^1 X13.2 Quartz快速进阶
/ y8 B' h! \& q4 I+ `- Z13.2.1 Quartz基础结构
5 m: N" v( Z7 b% c13.2.2 使用SimpleTrigger
2 R! }' P+ v* @# [13.2.3 使用CronTrigger9 g' x) v3 ]8 D
13.2.4 使用Calendar+ K# u. c" l/ F3 a; t- k% P
13.2.5 任务调度信息存储4 c/ Q, Q4 c( Y
13.3 在Spring中使用Quartz. a6 ]* A& y/ N. A8 Y
13.3.1 创建JobDetail+ t) q6 U" \5 i9 N I% U
13.3.2 创建Trigger" M' R) w; b0 A% Z3 v
13.3.3 创建Scheduler" F( J b2 d* X; q" i, l, w, U6 J) Q
13.4 Spring中使用JDK Timer" |& w8 k3 M+ ~, e: j" e \
13.4.1 Timer和TimerTask
! d4 v5 K K- o# ^13.4.2 Spring对JDK Timer的支持
* Y; M) C9 Z# v3 g# M4 w: O8 t# Z, x13.5 Spring对JDK 5.0 Executor的支持! M: Q, N) s5 U! |
13.5.1 了解JDK 5.0的Executor
9 }9 I; m+ c) x13.5.2 Spring对Executor所提供的抽象
' K: o; Q$ `6 r. B/ a/ j6 x. D6 a13.6 实际应用中的任务调度4 h; z% b. s) d1 _0 g5 P
13.6.1 如何产生任务
/ ~& {- t$ \+ A13.6.2 任务调度对应用程序集群的影响; C$ Q- k3 k; o5 b3 e8 a
13.6.3 任务调度云: y0 r% e7 S j3 T
13.6.4 Web应用程序中调度器的启动和关闭问题
& C: {" t. u3 I6 \# B& d13.7 小结* T" u! Q) ?/ {
第14章 使用OXM进行对象XML映射
8 b9 b6 V0 t( e$ |: D% Y! ?14.1 认识XML解析技术
- e- s/ m5 ^- v" Z1 j6 A14.1.1 什么是XML
. v+ z; O; n# s( } B14.1.2 XML的处理技术. {! c5 t+ l: B8 C' I
14.2 XML处理利器:XStream# B. d6 p) d8 T# x: v' {$ r
14.2.1 XStream概述' r/ \: D; c* q) x
14.2.2 快速入门
: A: d7 Y% E( i |14.2.3 使用XStream别名+ B' ?0 e6 q' z9 G; N
14.2.4 XStream转换器
+ G S6 [. }) B/ B14.2.5 XStream注解
" U2 u; i7 G1 b$ l( C9 h14.2.6 流化对象
) n. j8 F' q; s; u14.2.7 持久化API& Y" {& U! ?1 Q8 R! y
14.2.8 额外功能:处理JSON) y0 |( b0 |" _' V5 w4 L
14.3 其他常见O/X Mapping开源项目( j6 X e+ r8 [ X$ g
14.3.1 JAXB# Z' I" f; L$ K! z
14.3.2 XMLBeans
0 [9 n2 T- c; F% t- T1 Y14.3.3 Castor
$ ]7 [9 I- o/ Q9 Q% {. H14.3.4 JiBX( T$ N+ A% o- \# U- l2 b3 T
14.3.5 总结比较
- `3 [4 e5 R& [: j' n3 w( |14.4 与Spring OXM整合
$ k' z4 F7 c9 S1 h5 ], i" {14.4.1 Spring OXM概述6 z1 K% ]4 j/ Y5 G9 @4 x! ?8 G
14.4.2 整合OXM实现者
7 N( n2 F) _' R14.4.3 如何在Spring中进行配置! l" C) K1 z7 T4 u
14.4.4 Spring OXM 简单实例
/ D: [( F- U4 O+ W# t# t4 N) I, X14.5 小结 C2 n2 D4 t. X( }7 T! A) t
第15章 Spring MVC
4 Z( C* A! _: r( M15.1 Spring MVC概述% `/ d6 F* N+ G6 V, ~" P
15.1.1 体系结构" f; e. [6 ^- I( ^5 b3 M$ F7 u
15.1.2 配置DispatcherServlet
, u/ E+ C1 s+ i15.1.3 一个简单的实例8 y1 ~: e+ S5 F# x5 w6 R/ Q
15.2 注解驱动的控制器: }1 N7 w8 `2 F5 k' I1 l& m
15.2.1 使用@RequestMapping映射请求/ ^" I% h( u# ~; w
15.2.2 请求处理方法签名概述/ S* X1 {" M( i6 F) n! Q. J
15.2.3 处理方法签名详细说明
: \ b, U+ u( i. v5 G7 w15.2.4 使用HttpMessageConverter<T>+ [0 L1 `8 |7 M9 @5 Y
15.2.5 处理模型数据0 O* F9 l8 e2 F" s/ i7 ^$ S
15.3 处理方法的数据绑定
/ ^: a2 W/ y: ~- Y+ n! g/ C; h15.3.1 数据绑定流程剖析
N d4 D* V. v3 D) V15.3.2 数据转换8 D6 u3 ~! U0 m7 z! \
15.3.3 数据格式化
$ j* ~1 _' R* d7 r) e$ z2 s! R15.3.4 数据校验3 ~' A* i9 D/ ~2 f
15.4 视图和视图解析器3 M; G' C) s4 V6 M/ X& G
15.4.1 认识视图5 z1 P1 u7 K% p. g* Z9 j( E
15.4.2 认识视图解析器
2 p. R/ B& C' V% R15.4.3 JSP和JSTL$ ^" i6 w8 F4 E
15.4.4 模板视图% B# i( b: \) Y; X. @+ k
15.4.5 Excel
" \4 s7 ~3 R t15.4.6 PDF* Q, ?0 z& T& T: i. s1 F
15.4.7 输出XML& S+ S0 V) X$ g. V& a
15.4.8 输出JSON" v6 t s( `6 S5 E; U& G) _2 v
15.4.9 使用XmlViewResolver. C2 B" u# i% j
15.4.10 使用ResourceBundle ViewResolver4 x* y" l% B3 l, T
15.4.11 混合使用多种视图技术+ J& r6 b/ Z0 n
15.5 本地化解析& a5 i# i& a6 k
15.5.1 本地化概述
9 n6 c$ X6 B1 N5 P5 r! ^, I3 C15.5.2 使用CookieLocaleResolver1 X* b/ Y8 B \
15.5.3 使用SessionLocaleResolver
! ~; x; l0 C4 M# p15.5.4 使用LocaleChangeInterceptor7 s1 S- l; U$ E# J- ?0 D
15.6 文件上传- \1 w; U& x& o/ p8 }8 G
15.6.1 配置MultipartResolver
% ^3 A+ L/ V1 B. z15.6.2 编写控制器和文件上传表单页面
/ h6 a9 b8 h1 m15.7 杂项9 o& H/ M2 x' Z; P P1 B5 ^
15.7.1 静态资源处理% q$ P4 r, C1 J' d" W% }1 s0 o
15.7.2 装配拦截器
" E+ I9 A+ R/ I n, x) V( j& ~15.7.3 异常处理
0 b7 o) O8 b6 h' W: B" `15.8 小结 ^- v) M+ X4 E
8 n0 V2 H7 \- b/ t- M8 d
第5篇 测试及实战. }3 E4 L9 T% J, G9 N' o! Q
第16章 实战型单元测试9 H- j* v9 O% ~4 ^# G; H5 v$ o7 x
16.1 单元测试概述( r4 F: n! T. K) H) g, t
16.1.1 为什么需要单元测试! b/ X8 W* n& ]9 r
16.1.2 单元测试之误解
: ^, c2 q: }; l- ~" M16.1.3 单元测试之困境
" b' i( [+ u+ x4 P+ z+ S16.1.4 单元测试基本概念7 T# T9 s3 c6 H: t
16.2 JUnit 4快速进阶
! f+ X' |. [+ `& P% ]16.2.1 JUnit 4概述 S/ S% h6 w, W/ |/ e' I
16.2.2 JUnit 4生命周期
" ^% z) J# n/ \/ X2 z8 Q( K16.2.3 使用JUnit. ^+ S6 `; J5 q- s0 i9 i. b3 I5 N
16.3 模拟利器Mockito
4 S' C& s' Q$ G+ q8 f16.3.1 模拟测试概述0 {6 a) b' O l' f
16.3.2 创建Mock对象( k6 O1 w- [3 N$ [4 C. x* Z
16.3.3 设定Mock对象的期望行为及返回值7 q- b; }+ n N% d4 |
16.3.4 验证交互行为
+ { O5 z) J I1 c$ ^16.4 测试整合之王Unitils7 M2 a% O) o3 x- t: e
16.4.1 Unitils概述5 `& m, {9 [/ ~) x7 i8 U' i
16.4.2 集成Spring
) { Y, w+ H; I. _0 q1 g# [16.4.3 集成Hibernate& H! H* A [1 ^
16.4.4 集成Dbunit
* |! H9 q" v$ d2 P8 z9 Z% Q/ M* o16.4.5 自定义扩展模块
/ v N% G2 b$ h16.5 使用Unitils测试DAO层5 z x" s" b7 Q
16.5.1 数据库测试的难点9 S9 [4 \% {; t# [; o1 \. o* g
16.5.2 扩展Dbunit用Excel准备数据( C: w0 U' Z) X* T4 _; f$ G
16.5.3 测试实战) A: C ^+ h K3 z
16.6 使用unitils测试Service层: i: @7 p& e! G1 r6 {, u/ _
16.7 测试Web层
: Y+ x) M7 c/ k, X16.7.1 对LoginController进行单元测试
# q' p8 N9 r2 @+ ?' m1 ~% b16.7.2 使用Spring Servlet API模拟对象2 Z( a% M y3 i- }& `/ q
16.7.3 使用Spring RestTemplate测试+ b$ a) S6 n, h `
16.7.4 使用Selenium测试/ v# M7 f: l. s$ V6 C# p
16.8 小结
$ D0 J) f& ]6 G, q* L: Y. Y) v第17章 实战案例开发
! D H% ^( ^: {; g Z: t. V17.1 论坛案例概述
9 f* g+ n: y: x1 @5 D17.1.1 论坛整体功能结构/ y2 U: f6 ^, _; J6 x$ i- q" V( C8 p
17.1.2 论坛用例描述+ ?% x% L* v0 V8 N7 }
17.1.3 主要功能流程描述, n& w! h/ e/ J( G
17.2 系统设计
5 F8 U0 f$ U8 |/ v. N17.2.1 技术框架选择! P* ?+ V& R8 o4 W9 B
17.2.2 Web目录结构及类包结构规划
2 {1 G) O7 a( p4 I# f7 ?, {+ S+ P17.2.3 单元测试类包结构规划% e# E7 L/ i; @2 |, `
17.2.4 系统的结构图
3 J: E* B9 M) Q6 r' n17.2.5 PO的类设计& A8 X$ s$ i7 k. y' g
17.2.6 持久层设计
! \, Y, a. X3 M' q- I17.2.7 服务层设计
. L0 b8 {, J) v# d( h; G& |* U17.2.8 Web层设计 v0 T# d0 `! f( Y( ]9 K
17.2.9 数据库设计# ]) Z: s3 A4 [9 D4 t
17.3 开发前的准备
! Z7 D4 Y) C1 y6 F* b5 Q17.4 持久层开发
5 S: s6 t6 o [* u1 \17.4.1 PO类5 N+ U" E* r* F' G9 v' A) G
17.4.2 DAO基类
. f: v V) ^7 k5 m' n17.4.3 通过扩展基类所定义DAO类
4 x+ _ C7 Q1 L7 c- ?4 F: f17.4.4 DAO Bean的装配1 L/ Y0 g7 j- s' N
17.4.5 使用Hibernate二级缓存3 y& t8 P( s z8 y
17.5 对持久层进行测试; U% S1 _* E8 M1 p' r( K
17.5.1 配置Unitils测试环境
' w* j# C* M* s: J" Z17.5.2 准备测试数据库及测试数据: h/ v) I5 z! |! P7 t- k! ?" b
17.5.3 编写DAO测试基类9 n4 ] E9 c+ w# k/ a
17.5.4 编写BoardDao测试用例
9 d6 K4 ^+ [4 i" v9 a: {9 b4 E17.6 服务层开发
' F/ B. h; s9 @4 I, ~17.6.1 UserService的开发
% l4 X5 y1 Y7 c, \' `8 x _+ K17.6.2 ForumService的开发7 C- ~" `5 X- A; `
17.6.3 服务类Bean的装配+ W0 K4 D% C" [+ Z9 B' F7 c
17.7 对服务层进行测试
" _1 v/ H% K0 ?$ S! [17.7.1 编写Service测试基类7 q9 K7 M& l7 u$ `1 x% i
17.7.2 编写ForumService测试用例
* Q# p G* ^9 R17.8 Web层开发
2 X+ h* u. J+ n+ q4 _5 K17.8.1 BaseController的基类
5 F: x% j6 D$ D: ?17.8.2 用户登录和注销
; x% W' C8 V% B, o, A17.8.3 用户注册
4 \; W) j- F* w9 d* `& t4 `17.8.4 论坛管理1 U/ A C/ Y5 D! o6 a" v Y
17.8.5 论坛普通功能; N0 K$ D* [+ P
17.8.6 分页显示论坛版块的主题帖子5 n( Z0 I/ G: H+ l" A3 Y
17.8.7 web.xml配置
, x6 a/ S8 Z3 Z% t. |9 y9 w4 W) l17.8.8 Spring MVC配置
) g; L# j3 P, O' b17.9 对Web层进行测试
0 x6 {# V, k3 _17.9.1 编写Web测试基类
|5 [1 `& b& L M. K17.9.2 编写ForumManageController测试用例
; X ~8 C3 F0 t6 V6 E17.10 部署和运行应用 G$ D( a$ X# t# R& Y* ?3 k9 n- | A9 @
17.11 小结
$ k+ B% q7 T4 D( {0 X以下内容详见本书配书光盘:2 P9 q1 c. ?# `9 C8 ?
附录A JavaMail发送邮件' i8 M; A& ^' F9 B/ K7 c# D$ {
附录B 在Spring中开发Web Service0 A1 W, V) ~0 M8 ~! q9 a
( m+ ?4 E Z5 c1 ]$ T1 l' bSpring 3.x企业应用开发实战(高清版)
. ~4 V2 s$ `6 j' p
2 R. {% G; K" i" u- X# W5 N; }0 o8 ]
2 `# N8 u1 F7 p |
|