|
该用户从未签到
|
揭示内幕、深入浅出
1 J) x) B: I6 D4 s同步更新、与时俱进5 q& ~6 J9 x5 w% }9 f2 M1 t
突出重点,淡化边缘1 _+ v) g" T3 v7 p# t0 @6 Z/ K
理论透彻、面向实践
/ u8 F- Q5 y5 _, a# U. q代码简洁、图例丰富
2 \2 Q* l9 R: D+ M% O, T注重趣味、轻松阅读
; m* ?* G6 G7 L; K! h相关知识、一网打尽2 e8 V0 r5 y6 g" \& { V
历时一载、倾力打造
: O; b* F8 w$ a( _- z=================
* C- S6 I# o2 r6 U# T7 ospring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为java领域第一开源平台的翘楚地位。8 ~. a# K$ X1 B$ S9 {: ^( Y/ \
Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升应用开发的优雅性。
: b8 R/ x; S! M" _ 《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。此外,本书重点突出了“实战性”的主题,力求使全书“从实际项目中来,到实际项目中去”。
3 { c" [6 ?4 M* ~2 t; m
=========================================================================================== r# f6 \& Z, e8 L2 b) V
第1篇 概述
% G. b. k) k9 O" u0 @第1章 Spring概述
% u+ K! I5 H7 u: T K- ?8 Y/ J1.1 认识Spring9 P8 r; o0 S9 X) f+ m& n- E
1.2 关于SpringSource
1 R/ C4 t& T m* M! T" J1.3 Spring带给我们什么9 w& {3 ?+ o- D; `& D I
1.4 Spring体系结构
w& U* `2 m7 G( K) | t/ b# r& _1.5 Spring 3.0的新功能5 S' d( v3 e) O2 A- \* _0 `1 R; [
1.5.1 核心API更新到Java 5.; [. ]. c1 H' r. B% D* r" V. R
1.5.2 Spring表达式语言
! s% |$ X0 t N' O0 a' ?1.5.3 可通过Java类提供IoC配置信息- y/ e! A- x! X# P5 b% v! Q( }! e6 Q
1.5.4 通用类型转换系统和属性格式化系统
3 ~( s) d4 }- |* V+ L1.5.5 数据访问层新增OXM功能
( z$ O. \, ^3 Q2 Q1.5.6 Web层的增强
( U4 J! ^1 R3 T1 ]4 f0 ~1.5.7 其他
2 O: @) O$ i, ~" S( W% i1.6 Spring对Java版本的要求
6 \3 h. g! O, t# _+ y8 C1.7 如何获取Spring- E; `6 l" A, Z( J, t- y
1.8 小结. o9 W& z; ?8 p, S8 n' Q c
第2章 快速入门# a# {2 [4 H( y9 {
2.1 实例功能概述6 l0 L" l0 m6 j. P# r
2.1.1 比Hello World更适用的实例
" ?5 x: s7 B& G0 g. E0 ` I1 i2.1.2 实例功能简介( t- }- u+ K' v6 V, T3 `
2.2 环境准备
2 \6 |' V4 S: t/ n' r2.2.1 创建库表
$ g1 _8 T+ H( m6 @2.2.2 建立工程# H4 X/ I8 K3 S- [0 M4 Z4 S
2.2.3 类包及Spring配置文件规划/ S2 ~8 C. _; F/ s
2.3 持久层
4 T& _2 p H( @7 @7 p$ ^2.3.1 建立领域对象9 P2 e% C; L: \! Q' q) X
2.3.2 UserDao
: z) W. @( X$ x3 J) D" o7 s2.3.3 LoginLogDao
9 ]. m. J0 r, o+ Q4 N2 T2.3.4 在Spring中装配DAO
* _% G# s8 H5 K. O- L2.4 业务层
/ e. O9 c8 i: k; _3 t( Z0 k2.4.1 UserService
# w8 l* U' k8 G, t: @5 |- X2.4.2 在Spring中装配Service
2 h6 _+ r5 E2 z9 h2.4.3 单元测试% K) K1 J, K! d6 P8 _) h: f1 M
2.5 展现层5 `( }: M9 P: D7 z
2.5.1 配置Spring MVC框架
1 L; O# _6 G S$ ], `& g' h& m2.5.2 处理登录请求$ O1 M1 \/ d8 X- A6 s$ _. m7 L
2.5.3 JSP视图页面
7 A# W" F# e+ J0 P" C# ?! F1 i2.6 运行Web应用
0 }2 o7 j" Y; e' F2.7 小结
# b1 e# N- j5 w" }. l: R+ [+ r3 h9 I8 j9 D. _4 `
第2篇 IoC和AOP
6 E/ I" R/ {3 a1 R) g第3章 IoC容器概述
. a" z$ \2 A7 s3.1 IoC概述
* U" R ?- v9 r3.1.1 通过实例理解IoC的概念3 E' f& t7 W3 o) B/ Q, S6 P9 J6 t, O/ m
3.1.2 IoC的类型
4 Z) t# a7 t }8 y+ _4 v3.1.3 通过容器完成依赖关系的注入6 A/ f* L& b$ t7 x: s) G* f
3.2 相关Java基础知识( D1 `1 {3 d' h( t
3.2.1 简单实例
& h+ [# V/ p! N _. x6 Q3.2.2 类装载器ClassLoader
. A4 M4 C; ]+ h# ?3.2.3 Java反射机制4 p8 d& a' \: R, J
3.3 资源访问利器6 X. b4 b( n3 w& ~# j1 f3 d
3.3.1 资源抽象接口
. R2 T# y. \5 ]3.3.2 资源加载, X1 _/ ]# y) X
3.4 BeanFactory和ApplicationContext: e' g$ W* i- b5 p9 |9 j" U
3.4.1 BeanFactory介绍
4 t4 `& s* A* c, ?7 q3.4.2 ApplicationContext介绍, c0 {4 b3 C0 T8 F
3.4.3 父子容器
% V, h6 X5 W$ }( w/ u' ?- G0 l3 }3.5 Bean的生命周期
2 v) i3 @( s: h7 j) i$ V; _& P3.5.1 BeanFactory中Bean的生命周期
9 `2 d. D( ?3 t5 L% f3.5.2 ApplicationContext中Bean的生命周期
" K+ J1 M0 m/ |. O! _3.6 小结2 \: D: Q! ?0 v$ ]. q7 @
第4章 在IoC容器中装配Bean$ Z- @ f$ U* B
4.1 Spring配置概述. t3 e# t' d8 x
4.1.1 Spring容器高层视图6 E0 ^$ h: F# @. C
4.1.2 基于XML的配置
* a1 j: s* t# [3 k8 B; E2 i5 K4.2 Bean基本配置. y# S5 e2 b# C# v# g
4.2.1 装配一个Bean2 j/ H9 U( v+ S, E$ w4 j
4.2.2 Bean的命名
+ a" ?- N% E) d# t$ ` {/ ]! d4.3 依赖注入. v! m0 x. i8 s. R+ s1 C8 Z$ i2 L
4.3.1 属性注入
) C3 B8 P9 Y( ^5 E9 T8 Q1 A' f' x4.3.2 构造函数注入6 H& k& r7 _ N; y
4.3.3 工厂方法注入
" \; b1 k5 I( Z- H5 P9 h5 L4.3.4 选择注入方式的考量
( H$ ]7 P7 f. v9 Z4.4 注入参数详解2 M$ F' {8 x0 h9 O: e B0 |
4.4.1 字面值: v. X# I0 K2 Q/ j* d0 G j& M
4.4.2 引用其他Bean+ M4 p5 {3 e! \
4.4.3 内部Bean
+ l8 }, K% s: w, c' Q4.4.4 null值
. T7 Z z$ c/ A9 j( k, _. v4.4.5 级联属性
6 M8 v% b0 Y0 a! r7 `4.4.6 集合类型属性2 {/ K$ d- e2 |7 j% d' ^
4.4.7 简化配置方式% K- K: _3 U- I, d ?5 c3 Z. S0 ?( @
4.4.8 自动装配, F3 S4 c& W8 @$ v# E; Z' q
4.5 方法注入
+ S! T- D" i/ |2 U; v4.5.1 lookup方法注入7 E: B& K# ]+ ~ H( r0 o" L
4.5.2 方法替换* o5 Z2 m* K2 f: B8 n
4.6 <bean>之间的关系
: O' g1 ]& K% U8 e g; @) D7 x4.6.1 继承! m1 V o, n* ~5 m1 p: y1 }) ]
4.6.2 依赖- Q; {' I3 {/ D& `9 r$ M9 d3 e
4.6.3 引用: I( q! X" M8 t- n* d
4.7 整合多个配置文件
' ^2 X. |$ m5 f4 y+ s+ q# j) G+ [. E4.8 Bean作用域
9 g, x& g+ h9 l" d3 d4.8.1 singleton作用域
5 s+ w+ o# p1 m0 {+ ~/ A4.8.2 prototype作用域
6 i( \! S7 R0 W! w! o9 w. P& v& M4.8.3 Web应用环境相关的Bean作用域
6 l9 D) F# a" [) `/ a3 Y4.8.4 作用域依赖问题3 Y* F8 P; J- W5 x7 D
4.9 FactoryBean4 ?/ v( e' _: V/ V
4.10 基于注解的配置0 m! _# W2 C9 [. D Y0 c6 T A
4.10.1 使用注解定义Bean
9 u p; ?/ j* |) X& O4.10.2 使用注解配置信息启动Spring容器( h! T* S5 w. Z- ^1 h4 q
4.10.3 自动装配Bean
0 D6 x; W( b5 A1 g# r, b2 E; L' |* _4.10.4 Bean作用范围及生命过程方法( C0 I8 U# G; D! m; R) x
4.11 基于Java类的配置
) r. K0 I( L$ t; N$ j1 R- j7 s$ z! b4.11.1 使用Java类提供Bean定义信息5 q0 i6 e% Y F
4.11.2 使用基于Java类的配置信息启动Spring容器
; p. V7 [3 k: {1 p9 a g2 `4.12 不同配置方式比较
9 ^$ S, E0 I3 L6 y' S9 o4.13 小结
. _, E$ s6 |6 s' }) z: |1 I# y9 S5 x第5章 Spring容器高级主题3 x& A6 B! y, k7 \5 q' K! a) {' o
5.1 Spring容器技术内幕8 x* t% b" K3 @7 t
5.1.1 内部工作机制
7 t( W* b h# d5.1.2 BeanDefinition
& G! k9 [3 r: T+ U: P! O8 l7 ?5.1.3 InstantiationStrategy
/ R1 k2 p. i, g# H& f& n) U5.1.4 BeanWrapper. F8 o( Y2 [* k8 B8 {
5.2 属性编辑器
& m5 [8 l' G4 a8 u2 K( ]5.2.1 JavaBean的编辑器
: z$ A4 h$ C; G z1 s, }5.2.2 Spring默认属性编辑器- i' g) Z$ W' P3 B6 V
5.2.3 自定义属性编辑器, v3 p* T( N8 }! @* M8 l9 `
5.3 使用外部属性文件
9 Y; M8 t& \# H& f4 c5.3.1 使用外部属性文件
: O o+ D" \% w& y. w5.3.2 使用加密的属性文件( D6 l5 B4 \! J N) o( F) W* K
5.3.3 属性文件自身的引用
- T& g0 `9 Z7 h1 r- T/ l- I5.4 引用Bean的属性值
P+ s' h- b8 V5 C4 {5.5 国际化信息8 J- s* p' h2 E( A3 }. \
5.5.1 基础知识2 U' n% o" j/ B: D
5.5.2 MessageSource' k" Y$ U8 |7 F( r' k
5.5.3 容器级的国际化信息资源1 f5 M. O6 c4 I$ k9 a, ^
5.6 容器事件- W/ H8 j9 h6 B/ y' P9 X9 b
5.6.1 Spring事件类结构
( t+ D, J1 p! m; w5.6.2 解构Spring事件体系的具体实现
s4 n6 ^' e5 g& i5.6.3 一个实例( l' k' @. |5 y4 ]5 r
5.7 小结% S9 k& r* e' u e1 k- p
第6章 Spring AOP基础
. b2 D3 l# \* Y5 ~ {1 f4 w, X6 p6.1 AOP概述
3 J0 V/ F" P) i) J$ R3 W6.1.1 AOP到底是什么" u! @5 {, W. E6 }
6.1.2 AOP术语8 `$ S& S0 R$ }* ?' t
6.1.3 AOP的实现者- }0 X6 T6 P' M- `1 g
6.2 基础知识
0 o. m3 T; h8 P$ M* j6.2.1 带有横切逻辑的实例3 [: j. j' E( i" N
6.2.2 JDK动态代理3 J" e' N9 M1 h
6.2.3 CGLib动态代理
& `* O4 w- f: Z5 N6.2.4 AOP联盟
3 r9 o# m8 |/ z1 M8 ^6.2.5 代理知识小结5 f n1 ?5 s% Z. F- h
6.3 创建增强类
+ K. L- W7 l( v9 w6 y: X" Z" \& T6.3.1 增强类型9 Q+ x1 X+ V/ k9 T4 N
6.3.2 前置增强
4 `. j& a8 d. z! x8 P; p2 p6.3.3 后置增强) X+ d, ~* Z$ b* v/ `# R
6.3.4 环绕增强
0 z8 {- f9 r: j! t8 C, Y) b5 V6.3.5 异常抛出增强
# O" n: p1 Y) k- Y& r' o1 _6.3.6 引介增强
% ?' I5 W" }# y a5 I6.4 创建切面# `. l5 ~9 e+ f8 k7 n7 H% `$ ~
6.4.1 切点类型" F# u" F3 e/ I. f) _
6.4.2 切面类型, G% H3 K/ k# t" o3 M3 c7 R
6.4.3 静态普通方法名匹配切面
7 I& C: H- h4 d. v( j" `6.4.4 静态正则表达式方法匹配切面
. L5 K+ ?& M9 p4 X6 N6.4.5 动态切面1 A. o- h0 K7 N# B( r+ k7 ^+ w" y8 E
6.4.6 流程切面
$ v9 n% ~! w$ t! n3 p6.4.7 复合切点切面 u+ q- {/ e0 E5 D& s
6.4.8 引介切面; i. l9 Q" B- l4 o0 a9 ?" x
6.5 自动创建代理
7 I7 F( Y0 H3 u! E! x6.5.1 实现类介绍
6 ^5 m' l, z. K6 P% n) G6.5.2 BeanNameAutoProxyCreator0 `5 l' }# F0 g" K9 F2 G L6 i% O
6.5.3 DefaultAdvisorAutoProxyCreator/ R4 K- @6 B$ }( h
6.6 小结
( K; t2 S' k/ y" w$ a% S第7章 基于@AspectJ和Schema的AOP
8 u9 | s; ?& x8 K' ~3 ?5 a; D7.1 Spring对AOP的支持
, c# U+ W4 |# t0 h& I7.2 JDK 5.0注解知识快速进阶8 q4 T9 Q3 v, ^& e1 p
7.2.1 了解注解
3 [8 h% x& _4 x' h& }( K, x7.2.2 一个简单的注解类
1 B' x4 i5 k) v2 c7.2.3 使用注解( f2 L7 `8 o+ s, c3 Z
7.2.4 访问注解; e5 V8 m- C8 q' ~. r4 c
7.3 着手使用@AspectJ: s5 H0 J( q% d1 g+ z1 J
7.3.1 使用前的准备/ x4 {" H% K- |5 \
7.3.2 一个简单的例子4 b# b% A" w3 }: N2 @! j# E2 i
7.3.3 如何通过配置使用@AspectJ切面
6 Q6 c7 b3 _4 d5 `" Y* a3 |4 ?7.4 @AspectJ语法基础" X) a& Z; U& K& ~
7.4.1 切点表达式函数5 p! O- u3 a% l+ W" r+ v2 w
7.4.2 在函数入参中使用通配符
& k# E6 F9 c% [+ d' q2 c5 X7.4.3 逻辑运算符* j* \7 _$ Y: C5 q8 D7 o
7.4.4 不同增强类型
% q8 R- V' H7 W# E* a% x# p5 `9 _2 a7.4.5 引介增强用法0 E4 Q! S* K8 O3 w- Y
7.5 切点函数详解( t/ Z9 o7 k4 r+ @
7.5.1 @annotation()
: m% Z+ H; _% ?( _/ i/ D7.5.2 execution()+ `& d% h* |6 y/ w$ F2 v
7.5.3 args()和@args()0 [) C+ i- T; H7 O7 i/ J8 P- I
7.5.4 within()
3 Z2 x5 g) b" e; }+ j7.5.5 @within()和@target()" ]/ Q, w h( L- g' A
7.5.6 target()的this()2 f0 N! D4 k/ y. ]7 ?
7.6 @AspectJ进阶6 v, B& b) {# P! }1 j# E
7.6.1 切点复合运算 M7 C- P- X2 n0 \5 j1 c/ c
7.6.2 命名切点
0 p: v) t& ]6 n, ?$ q7.6.3 增强织入的顺序9 `* A: h# z( T9 H' ?7 [
7.6.4 访问连接点信息
2 F, x. D1 d' y o8 J: ]. z: k7.6.5 绑定连接点方法入参
|5 i! r, K' U) _ {7.6.6 绑定代理对象
$ J7 N2 F: O* X: L7 g; w# R7.6.7 绑定类注解对象0 F& \* l ]" C8 p6 q
7.6.8 绑定返回值
9 t4 N3 u1 t" t2 }" Y4 H7.6.9 绑定抛出的异常$ s) @& |7 N. n( s
7.7 基于Schema配置切面
2 I- \1 t% r( @) X% w/ n7.7.1 一个简单切面的配置# R% U6 ?% _8 }+ ]+ [1 Y; }+ n
7.7.2 配置命名切点! Q. o$ \1 J: ?3 \
7.7.3 各种增强类型的配置
. b6 t6 b7 Q: J$ d7.7.4 绑定连接点信息
# D) n% x, T: L/ I1 u& J7 l5 M7.7.5 Advisor配置
* A/ _6 M% n# l r+ S, A e! s- E7.8 混合切面类型
' C6 Y! a0 g* d7 @, z, M7.8.1 混合使用各种切面类型% @: f, E; B+ ?; F
7.8.2 各种切面类型总结 C7 Y" S1 w- \5 u0 l
7.9 JVM Class文件字节码转换基础知识
@9 U" X' j9 [0 [% K7.9.1 java.lang.instrument包的工作原理8 S# ? ?2 O5 |. ^6 l( v# j
7.9.2 如何向JVM中注册转换器9 p+ ~7 c6 x) {- H3 p3 w1 e
7.9.3 使用JVM启动参数注册转换器的问题
6 c% \4 J& ]" H7.10 使用LTW织入切面' S/ v9 U6 w+ X' j% T s
7.10.1 Spring的LoadTimeWeaver# _+ t* H8 P* W
7.10.2 使用LTW织入一个切面
9 C$ m+ l) K, j: E+ g `7.10.3 在Tomcat下的配置
% t% m' j) D8 |8 k7.10.4 在其他Web应用服务器下的配置8 q* a. p; y. p: [# m
7.11 小结
( j+ A& V$ @" K9 K) J; ~( B' }5 V, L& h) I* H- Q
第3篇 数据访问
- J8 V" B" ^" n) `1 q2 D4 b' y第8章 Spring对DAO的支持
$ L+ R5 \4 T5 C8.1 Spring的DAO理念6 V% u; Q& @+ ?
8.2 统一的异常体系
+ q! e: |$ I# d" _% Q4 |" `8.2.1 Spring的DAO异常体系
4 e1 Q( E, [( }. @: Z* p0 b6 B8.2.2 JDBC的异常转换器
+ X3 H; w( V& p& @7 {2 n& J( Y8.2.3 其他持久技术的异常转换器
h6 U! u' g9 d# V- @8.3 统一数据访问模板0 ]) A `9 J9 A7 n' B* \
8.3.1 使用模板和回调机制
: i Y" M( E" F' E# U b) m8.3.2 Spring为不同持久化技术所提供的模板类
1 o# A V$ ^- P2 A. Z5 G! E* b8.4 数据源
3 U/ U% I k& k& }3 x1 h; d# R4 k4 a8.4.1 配置一个数据源
* V, z1 `, F; f8.4.2 获取JNDI数据源
' z8 I" {2 ]- p; w. Z5 P8.4.3 Spring的数据源实现类! N* _$ H, c: g# p1 |9 R# S
8.5 小结6 K4 j1 P& a" _2 y9 ^+ B' [0 g
第9章 Spring的事务管理4 w2 S7 n. ~6 w0 H y1 \" d8 U
9.1 数据库事务基础知识1 j2 G/ k0 f. |
9.1.1 何为数据库事务5 @9 R6 `$ o2 F/ y4 g- q/ d
9.1.2 数据并发的问题
+ T7 t; L. s" l0 ~9.1.3 数据库锁机制
; Q- Q8 j; M9 ~- g5 }9.1.4 事务隔离级别
$ k6 s* y1 K& Y7 {) j# {9.1.5 JDBC对事务支持: s) t. H, V" ?& |
9.2 ThreadLocal基础知识) W. e- K$ j5 N/ p6 V5 u
9.2.1 ThreadLocal是什么# p7 g9 ? E! I" O; R
9.2.2 ThreadLocal的接口方法5 |7 j+ G# ~+ V
9.2.3 一个TheadLocal实例
0 \, p! e* J9 B& s; g' F9.2.4 与Thread同步机制的比较. q0 x4 Z# Q7 l
9.2.5 Spring使用ThreadLocal解决线程安全问题3 e$ n' D# }3 V a' n" k
9.3 Spring对事务管理的支持
" w0 N3 z# X6 T. ]1 X: l6 c2 O) |9.3.1 事务管理关键抽象
- P3 a$ @* Z* f ]7 r$ Z+ b9.3.2 Spring的事务管理器实现类
5 G @; _2 N) j5 I2 s9.3.3 事务同步管理器9 h; w' |- P5 ]! q& p6 d
9.3.4 事务传播行为
; x$ \, U' M, q& b5 {9.4 编程式的事务管理 `/ N ?# Y, C! k& Z2 J
9.5 使用XML配置声明式事务
" S( x1 x: { g0 q/ Q9.5.1 一个将被实施事务增强的服务接口
- E6 q' H$ `$ ^' P7 U9.5.2 使用原始的: p1 N1 Q- N f7 I; I8 Q. B+ n7 z
TransactionProxyFactoryBean
6 K! H' m% J" T9.5.3 基于tx/aop命名空间的配置: c ~2 N0 e& K) q; L. S! @
9.6 使用注解配置声明式事务% p( @+ D. z$ N, i
9.6.1 使用@Transactional注解
- O# ^. _) |* F3 H- L) @9.6.2 通过AspectJ LTW引入事务切面
W; v* n+ Q) V0 m" }- ?9.7 集成特定的应用服务器
9 \% ^" L0 z- H$ n% ?4 J2 T" t( ?' D+ W9.7.1 BEA WebLogic
/ w \0 u6 x1 e! }5 d9.7.2 BEA WebLogic; V. T' S' f0 ]( l
9.8 小结8 d* ^3 x( v' g
第10章 Spring的事务管理难点剖析% |7 _( \* A6 U; d6 ^
10.1 DAO和事务管理的牵绊
0 ?$ t# T3 E& G1 E9 G5 \10.1.1 JDBC访问数据库
" ^% v* l8 Z$ i0 @7 n5 ^10.1.2 hibernate访问数据库
7 y* P5 b3 \- |& B10.2 应用分层的迷惑1 F8 X' h) p& H/ h+ J+ r
10.3 事务方法嵌套调用的迷茫7 o( ]& f* ^- y% C5 U `
10.3.1 Spring事务传播机制回顾5 ~# b( c4 b7 \1 p' u1 o0 _6 Y$ [
10.3.2 相互嵌套的服务方法2 \. p$ U* @4 i
10.4 多线程的困惑
' l2 B. j: D4 Y7 C3 a10.4.1 Spring通过单实例化Bean简化多线程问题" F! y7 t+ Y8 p% y) \, K S" f
10.4.2 启动独立线程调用事务方法
9 @8 }/ M V8 A/ q+ \1 ^6 y0 N% x10.5 联合军种作战的混乱
4 R# e- C2 q7 L* W10.5.1 Spring事务管理器的应对
$ j: u9 k6 A8 `" M1 h1 |- a8 s5 {10.5.2 Hibernate+Spring JDBC混合框架的事务管理
! X5 b) V4 i) V; [0 L9 b" C10.6 特殊方法成漏网之鱼* Q A; t& x; }- Y$ ]
10.6.1 哪些方法不能实施Spring AOP事务 m, Y% F$ ^- c# u8 s' s6 ]
10.6.2 事务增强遗漏实例3 a# G- G$ b# g" I7 s0 N9 o
10.7 数据连接泄漏8 {- B. o) p8 h! t/ F+ V
10.7.1 底层连接资源的访问问题) K. _- r8 K& d. |# b) N; ~+ T
10.7.2 Spring JDBC数据连接泄漏
. Q, P' ^4 a; t% P/ [3 L3 s10.7.3 通过DataSourceUtils获取数据连接
* K' `4 c# O( N% P6 y* o10.7.4 通过DataSourceUtils获取数据连接7 t! I4 e6 I3 V4 N9 t
10.7.5 JdbcTemplate如何做到对连接泄漏的免疫
5 c/ k! i1 l3 }+ U10.7.6 使用TransactionAwareDataSourceProxy
$ B/ |# C/ D; ~2 e10.7.7 其他数据访问技术的等价类& h& Q& x6 B" P1 v
10.8 小结4 \3 R( j6 U9 i! H, Z/ O
第11章 使用Spring JDBC访问数据库
9 [4 [$ v+ N$ b. a+ I11.1 使用Spring JDBC8 F% `9 a2 _" p# _% c4 B5 {
11.1.1 JDBCTemplate小试牛刀
1 C, }. W0 b" d4 V11.1.2 在DAO中使用JDBCTemplate2 b5 g) @$ w5 R3 {8 C" P
11.2 基本的数据操作
) V0 y; Q) ]9 Y- k; s. t11.2.1 更改数据0 b2 f9 z& c: `2 d2 t
11.2.2 返回数据库的表自增主键值4 R# ^9 }( k6 s# D
11.2.3 批量更改数据/ |+ `8 J7 x4 g
11.2.4 查询数据
7 C) {0 H X Z& ~11.2.5 查询单值数据
' m$ @! [9 p7 W' X0 f* r% W9 c) j11.2.6 调用存储过程* ~, D/ c0 q& h+ r
11.3 BLOB/CLOB类型数据的操作
7 |$ U) t" w" C4 \% l3 E11.3.1 如何获取本地数据连接
' A2 v2 D5 t s, U! Y11.3.2 相关的操作接口! M" | t9 ?" t4 ?: _5 x7 I0 q1 e
11.3.3 插入Lob类型的数据
8 z( O1 c9 i. N( b* q11.3.4 以块数据方式读取Lob数据6 H9 f i7 f6 V" G% \! t- ~
11.3.5 以流数据方式读取Lob数据
H7 U% ]; o4 g! N( a+ a( d11.4 自增键和行集* _- B5 x$ g# y' D& G" Z& `- A
11.4.1 自增键的使用! p1 C" w. `7 U6 S
11.4.2 如何规划主键方案/ M9 m/ \9 A# X0 u8 i3 B$ C- l
11.4.3 以行集返回数据
9 l6 A* f; L- ]! \11.5 其他类型的JDBCTemplate5 k6 s' {. [; F5 C. k
11.5.1 NamedParameterJDBCTemplate
9 v9 M. B4 L. b! _11.5.2 SimpleJDBCTemplate8 s @3 Q8 `. n/ B. B3 U
11.6 以OO方式访问数据库
4 R. C& F. N4 _1 z* K11.6.1 使用MappingSqlQuery查询数据
% h5 V' i3 G/ J# X$ @, Y0 _; j11.6.2 使用SqlUpdate更新数据, ?3 C$ N4 h1 Z! v" e
11.6.3 使用StoredProcedure执行存储过程# A- W" Y- }9 v5 J% V( b/ `, Q8 |
11.6.4 SqlFunction类" j/ U F- F, w+ M2 ^7 X2 F5 V
11.7 小结
+ o' T9 ~5 T: m4 s第12章 整合其他ORM框架1 q0 a. t% [8 C
12.1 Spring整合ORM技术
' [4 j/ q# K, x2 i4 s6 s9 F12.2 在Spring中使用Hibernate" j# K* z5 U- v3 S
12.2.1 配置SessionFactory2 ~5 B. z, c1 a2 l3 V
12.2.2 使用HibernateTemplate
( ?( Z; e% G, v k# g12.2.3 处理LOB类型数据, K5 y% b. ^- h7 |0 K5 v: g
12.2.4 添加Hibernate事件监听器$ ~ Z$ ^. n3 v
12.2.5 使用原生Hibernate API+ f# Y5 r2 A$ C
12.2.6 使用注解配置- s0 y' O5 T9 h1 k" R$ T1 M6 o7 k$ D
12.2.7 事务处理
& \# V1 z0 E% _& V. y12.2.8 延迟加载的问题
2 w/ C- V# \+ \7 D2 M& s/ ^8 ^12.3 在Spring中使用myBatis6 N# Q5 A; k# n5 Y z0 l& O
12.3.1 配置SqlMapClient
1 d4 r8 c8 F& o12.3.2 在Spring配置myBatis( i6 U8 ^. | O9 n7 P) s8 m
12.3.3 编写myBatis的DAO3 ?8 |$ H; P6 A7 ^/ A! z
12.5 DAO层设计
' q% q' W9 L* m( v9 ]0 U& V12.5.1 DAO基类的设计
' [4 ~$ R7 N2 x' y5 O7 l; f. m12.5.2 查询接口方法的设计' }0 N7 \& ~$ e0 Y9 A( X; K
12.5.3 分页查询接口设计; q* j1 V' E5 j! A* l* A: U
12.6 小结& v5 W3 J; U" K! z3 z j2 Z: p* J
; ^9 }. } Z3 r: ]1 m第4篇 业务层及Web层技术
7 \. N5 X: J# g& z* C第13章 任务调度和异步执行器0 C# @2 V: d8 X/ ]
13.1 任务调度概述
; R, q% i# q0 V: \ i13.2 Quartz快速进阶& B5 |5 Q K0 B
13.2.1 Quartz基础结构4 m0 j! R7 Z+ c* A ]& n
13.2.2 使用SimpleTrigger
0 p* s+ r7 i2 B! {: s- ^9 v. `13.2.3 使用CronTrigger
: }6 f" d; |% x- u1 ]+ K13.2.4 使用Calendar# e% _# j2 M0 `. h7 A
13.2.5 任务调度信息存储
' W& c* O6 i& K# s$ _5 @3 ~13.3 在Spring中使用Quartz7 }9 a% {* Z$ a7 G" e n$ N
13.3.1 创建JobDetail
2 j5 \: z+ L: k% W0 l F" D13.3.2 创建Trigger
! y/ l7 g! Q* f- c# Z13.3.3 创建Scheduler# n. ?0 Z+ G/ c l- x' O5 ~' d1 V
13.4 Spring中使用JDK Timer( c# h1 `/ F! H6 A% X
13.4.1 Timer和TimerTask M$ r: h3 m+ v! _1 T, D- z0 M1 F& W
13.4.2 Spring对JDK Timer的支持
* r4 H# \+ D6 r! \, C; P% j13.5 Spring对JDK 5.0 Executor的支持
% T0 @# B/ W( w d/ R/ P4 ~- C13.5.1 了解JDK 5.0的Executor
5 ?$ {) A+ G/ o. ?" h `- i13.5.2 Spring对Executor所提供的抽象
) Q+ s0 l% _9 I; _3 P8 A) L13.6 实际应用中的任务调度9 l# C& u" i3 _$ D5 g0 |; Q1 ^
13.6.1 如何产生任务
I F2 G( }8 O+ {/ ~. V13.6.2 任务调度对应用程序集群的影响- o! [1 t0 n, O" N
13.6.3 任务调度云
0 Z6 T5 ^3 x4 h3 A9 M4 c13.6.4 Web应用程序中调度器的启动和关闭问题 f {/ Q- t, M# @* T+ e7 f
13.7 小结+ R1 s/ d. \# G: L, u* o
第14章 使用OXM进行对象XML映射4 u' z6 d9 i3 | ^5 x6 M% l
14.1 认识XML解析技术 W+ j; D1 q4 { Z/ f, K
14.1.1 什么是XML
1 M" l' R2 L5 m6 {* U& s0 C! ~14.1.2 XML的处理技术% b# g3 G9 P5 v
14.2 XML处理利器:XStream
5 T+ w' Q5 o6 h6 R14.2.1 XStream概述
% k& r+ z# S- b1 F ] O14.2.2 快速入门
, x( H! b* t& l: B! r5 ^1 V3 T14.2.3 使用XStream别名
5 C2 I( h# s* a6 ]' V14.2.4 XStream转换器
/ n, b) K9 |0 `* {; q3 |) z14.2.5 XStream注解
- r6 p$ ^2 r1 ~14.2.6 流化对象; S7 O& I) ^- N* ]" i
14.2.7 持久化API f4 q2 v- z! u) Q* {0 V
14.2.8 额外功能:处理JSON7 U( V* q! Z$ U9 Z4 p' [' B9 e( [
14.3 其他常见O/X Mapping开源项目
1 U' D0 q, r0 z6 y, N' H14.3.1 JAXB
8 x5 |; f9 S: z& q- {& D- H14.3.2 XMLBeans
6 y! w* Z3 a1 c. L; z14.3.3 Castor9 F# y9 Z# t/ I$ x
14.3.4 JiBX
( m2 \3 b9 K2 b2 ?1 R2 ~14.3.5 总结比较
a( D. w4 Z; l# ?14.4 与Spring OXM整合: S$ n0 r, X, ^6 a! z* d
14.4.1 Spring OXM概述
8 ]8 A$ T+ m2 i& K4 V14.4.2 整合OXM实现者
2 R3 u) n6 k7 d# b3 y4 ]) ]0 f14.4.3 如何在Spring中进行配置
$ c! e, Y+ o, K7 w14.4.4 Spring OXM 简单实例( M' F6 K& w% L) f
14.5 小结
2 J. v. ?9 G* Z* d. d第15章 Spring MVC
; b2 g7 y* E) D, X9 s( Y; E15.1 Spring MVC概述
1 X1 F; ]. |- h* }, H15.1.1 体系结构
8 D5 ^$ [& T" d15.1.2 配置DispatcherServlet/ J8 o$ L# k7 S, n7 x8 x i3 C
15.1.3 一个简单的实例
9 _6 k" O) ~2 N) E15.2 注解驱动的控制器
. h5 a8 X5 ]2 X( G1 G, R+ p15.2.1 使用@RequestMapping映射请求
2 c! U& u' `9 S, R% A15.2.2 请求处理方法签名概述
& {% u0 k1 [2 N5 G15.2.3 处理方法签名详细说明& J( n9 h) R& c4 e5 [1 D$ s. [- M9 N
15.2.4 使用HttpMessageConverter<T>0 {: {7 d) Q% J; K. D4 w
15.2.5 处理模型数据
: ^: A# W: B+ \' d/ g5 s, Z15.3 处理方法的数据绑定$ I8 s+ F: _3 R0 d/ W$ o( T) t
15.3.1 数据绑定流程剖析% t/ K: |% Z: T" d
15.3.2 数据转换
+ Y1 b7 G5 q4 G15.3.3 数据格式化" F4 W | Z0 Y: J9 Y
15.3.4 数据校验
5 |9 n. o9 O1 S! o& k) a15.4 视图和视图解析器: k8 _1 q1 V) d/ y! f3 K- f
15.4.1 认识视图' s' O9 f7 k( L4 n1 V4 ~& `
15.4.2 认识视图解析器( ?2 ~% N& J, U
15.4.3 JSP和JSTL9 w% z- W+ p! c( W) @8 w( a4 R
15.4.4 模板视图+ q( |. o3 b2 m, x# W" ?7 H! k8 K
15.4.5 Excel" d! k2 p( B9 R& W8 w+ c
15.4.6 PDF. b* m2 n. J C5 F+ b5 @0 ~- r$ U! s: N M
15.4.7 输出XML
3 H6 g0 d6 W) I5 }1 z15.4.8 输出JSON3 k' q' R/ i2 \3 z3 n9 u- p/ f9 T
15.4.9 使用XmlViewResolver! ~3 K1 S3 u9 Z5 Q' I }4 A% N
15.4.10 使用ResourceBundle ViewResolver2 o8 e, p# |1 O$ r
15.4.11 混合使用多种视图技术
6 T7 p/ {- b# j4 E4 `15.5 本地化解析' ]1 D4 K/ P) y9 f) Y
15.5.1 本地化概述8 d- y$ V0 z8 t1 v4 O/ Z( |
15.5.2 使用CookieLocaleResolver$ J1 C& P6 Y! v5 d' l
15.5.3 使用SessionLocaleResolver) o8 n9 `" Q: r# n
15.5.4 使用LocaleChangeInterceptor$ P2 v7 C3 i% `
15.6 文件上传, D# ^8 A( e9 D" s M% O7 b! B
15.6.1 配置MultipartResolver9 n4 _. b8 ?. u
15.6.2 编写控制器和文件上传表单页面# A; @& N0 K. x4 L8 C
15.7 杂项
$ O, m" B" F( L; d- R8 E) k5 }15.7.1 静态资源处理/ ]" r8 z5 i# z2 ]
15.7.2 装配拦截器
% l8 {2 |9 T3 g; R+ b* `5 f9 c0 f& A15.7.3 异常处理
+ ?, J I, D( L- l, w15.8 小结
* R4 Q. k. u; K' I5 b% E
( R) o9 d/ l* N" n& g; X# y# i1 e第5篇 测试及实战1 V3 e F: c; n8 N; O5 f2 X
第16章 实战型单元测试6 K9 w. m7 O r2 t
16.1 单元测试概述
4 F! _4 |9 U; Y! b: g; G, _16.1.1 为什么需要单元测试, n* E8 |$ M$ `0 D
16.1.2 单元测试之误解4 s& u! c, `/ B8 Y& l
16.1.3 单元测试之困境: O4 Y5 [- c7 U% F. n( b
16.1.4 单元测试基本概念
+ D; C- t; b) G+ V16.2 JUnit 4快速进阶/ |: T- H& X2 {* e
16.2.1 JUnit 4概述9 u5 i5 n' X( Q: a1 h* I! c8 E
16.2.2 JUnit 4生命周期' P9 g( E: [, G1 \$ Y O! ]2 x% v
16.2.3 使用JUnit
7 g$ w. U3 F0 Q6 l# t16.3 模拟利器Mockito
8 |& j) Y- O' I% l2 D3 ]16.3.1 模拟测试概述) ?' w6 q; ]9 K# E4 D
16.3.2 创建Mock对象; m) f: T( J+ r
16.3.3 设定Mock对象的期望行为及返回值, c/ k. o. b B1 }" p# U4 b
16.3.4 验证交互行为
3 t! X' r; ^# k8 G1 |16.4 测试整合之王Unitils
' c( B( U% U" K0 Z16.4.1 Unitils概述# f4 l& V" `, o+ G7 Y) D
16.4.2 集成Spring' g% r/ R9 n1 h. b( L1 L
16.4.3 集成Hibernate
0 h/ {% K& [, e16.4.4 集成Dbunit
, I- J) W: u3 b# d16.4.5 自定义扩展模块5 ^& \/ W# R, h% n% ~6 l; I
16.5 使用Unitils测试DAO层
0 z: e* P: R3 I16.5.1 数据库测试的难点
% c* K- _1 [0 e$ d. v$ x' _( J16.5.2 扩展Dbunit用Excel准备数据
4 R; X; d) I" n' e/ ^16.5.3 测试实战
( s1 w0 Z; ?1 c; B" P16.6 使用unitils测试Service层
: R8 F: h4 M. Z A! A8 N16.7 测试Web层+ g7 @6 O! p7 {( P
16.7.1 对LoginController进行单元测试) i5 \, X- t G+ Q
16.7.2 使用Spring Servlet API模拟对象 k2 ?( D$ H% t
16.7.3 使用Spring RestTemplate测试5 l" T. F& |0 ~/ A" i4 R
16.7.4 使用Selenium测试, C% G: o7 T. X0 i0 H( J0 o5 C
16.8 小结. Z7 @9 Z* a% ^2 ~1 }0 A
第17章 实战案例开发
- ?4 C* K- |! X9 O17.1 论坛案例概述
% h; F. ^4 V6 E6 L% K8 O7 w/ J( P17.1.1 论坛整体功能结构
$ W5 q/ I- x8 |17.1.2 论坛用例描述
3 R* r2 N$ |* t17.1.3 主要功能流程描述
: u# e0 b# A. ], e8 t: y6 K3 G0 I17.2 系统设计0 y, j9 K; G) E9 a3 }6 i* s
17.2.1 技术框架选择
1 J3 v1 J. L1 k! w3 ]8 f$ M17.2.2 Web目录结构及类包结构规划
8 e% i- W1 F# x8 N! J l- L% a9 E17.2.3 单元测试类包结构规划; }4 s+ n4 K- r1 Z5 D5 G' [) ~
17.2.4 系统的结构图7 \. {0 Q3 _* z7 Y; s$ F+ t, }
17.2.5 PO的类设计: B& o2 K+ g5 k {7 ?7 H, H& L& Q
17.2.6 持久层设计
* w' }' ?( e* i0 N5 K17.2.7 服务层设计
- j9 G1 C: O/ C* J) N- C" d5 {17.2.8 Web层设计
+ ?; }% }, |" {3 G' t( d17.2.9 数据库设计
8 O% ]* e- {7 j8 z4 p# w- O17.3 开发前的准备
( |8 i+ m V! z& o17.4 持久层开发 D2 y% ]. w f; K' Z' X
17.4.1 PO类
3 @3 A: c4 l0 ]- L, [, T, j17.4.2 DAO基类
8 N5 n1 E8 y2 ?9 @* z; g9 t17.4.3 通过扩展基类所定义DAO类3 J/ Z3 F5 k/ G# S" i: E, a! m
17.4.4 DAO Bean的装配* s1 L/ o2 _$ R& A9 ~
17.4.5 使用Hibernate二级缓存
1 [5 i' J. v1 r# X$ O" V17.5 对持久层进行测试
7 [; e" \( X* F y17.5.1 配置Unitils测试环境! }! x9 V i7 Q, ^' j
17.5.2 准备测试数据库及测试数据
! j+ ^( F; \* t) R8 F2 S17.5.3 编写DAO测试基类- h. Q2 b1 ^# ^2 }7 x
17.5.4 编写BoardDao测试用例1 I1 w! @6 j8 c! \
17.6 服务层开发
, [0 ?/ s2 [9 H! d17.6.1 UserService的开发
+ N1 g L+ C7 M) C, h0 x8 m17.6.2 ForumService的开发
( Z! k/ d+ r' P4 t; s7 l17.6.3 服务类Bean的装配% L; w7 A, X( p4 v% B$ a
17.7 对服务层进行测试
3 {: R* |4 _6 A& g9 W ~17.7.1 编写Service测试基类 r& p1 t) x m; u0 S c% J
17.7.2 编写ForumService测试用例8 M: X4 p9 |2 a& @
17.8 Web层开发5 u8 g+ m# J. b$ y0 h4 P \! N7 ]
17.8.1 BaseController的基类
- H( E! Z; B. W, l3 A17.8.2 用户登录和注销) h7 a" ]3 ^& z$ e) f; B& A
17.8.3 用户注册% k- e1 s& g) Z* B
17.8.4 论坛管理1 W* _& v9 u* J3 p' ]" J
17.8.5 论坛普通功能6 o, |+ v: Y0 s$ r; F& i) P
17.8.6 分页显示论坛版块的主题帖子" E- w3 t4 c( l. [
17.8.7 web.xml配置
5 w8 a4 j+ }: ^% ~17.8.8 Spring MVC配置0 v% d1 S' g0 h" u7 K1 R
17.9 对Web层进行测试
& I- @$ r' D5 j/ E; ^8 r" D! P17.9.1 编写Web测试基类: Y# G* r v" r0 `- T1 j
17.9.2 编写ForumManageController测试用例
1 `, q( I4 Y& Y# m4 P3 L17.10 部署和运行应用
- ?2 k8 A" [, q. m W1 l17.11 小结0 M# \5 d& y8 k# l/ k7 C
以下内容详见本书配书光盘:
# [* b+ m- u; [. W+ f3 [附录A JavaMail发送邮件
9 o# o% R- w; x附录B 在Spring中开发Web Service
# }4 Y; G# N L! _% h& r: M2 ?" f; X5 B1 ?; i2 ~- E H) D
Spring 3.x企业应用开发实战(高清版)5 |# x8 v+ I, v! J" z+ F# t
5 a6 ]1 G. L7 K+ n8 s8 g
! a" U& _: j' Q5 `8 ?% @- w |
|