该用户从未签到
|
揭示内幕、深入浅出
3 X, s: v G3 R1 }7 G5 I9 |同步更新、与时俱进
- Y* C B( i+ G8 _# W! `) V8 Y突出重点,淡化边缘+ n! h) q1 Y. e! z( w! B! r0 l
理论透彻、面向实践2 v6 M0 R9 b. l2 k# h
代码简洁、图例丰富
/ e/ g$ P# x6 d& s注重趣味、轻松阅读/ s, r* S6 t0 X
相关知识、一网打尽
" o6 z, f' f- [' _3 M- T历时一载、倾力打造
" d6 U& q5 {5 ?0 l- B5 B% I* N=================& d- d ?+ U1 N- ]) A
spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为java领域第一开源平台的翘楚地位。
% ]- B1 u1 F$ c# V9 ?4 {( M Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升应用开发的优雅性。3 D* _. F9 A4 q3 _0 t9 M
《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。此外,本书重点突出了“实战性”的主题,力求使全书“从实际项目中来,到实际项目中去”。
* j; Z" S! l E: q
===========================================================================================/ ]" C1 a( Z, ^0 n/ }# q
第1篇 概述) C% X0 [! @" @1 W8 a9 [
第1章 Spring概述2 E5 G+ Q' W2 C5 l
1.1 认识Spring* X+ X1 o2 M2 W! z$ |" _8 E' f
1.2 关于SpringSource) r8 v+ z, F0 N: [1 i
1.3 Spring带给我们什么
8 E3 Z: `; N; h2 R3 r4 P1 w4 h1.4 Spring体系结构
0 i) L! F' Y% o/ M0 F/ C1.5 Spring 3.0的新功能; z$ o6 ]1 J# U, S& f
1.5.1 核心API更新到Java 5.0 {7 U& e: _8 A/ Z
1.5.2 Spring表达式语言
0 ]$ I( [& c: |) Q1.5.3 可通过Java类提供IoC配置信息7 \+ _% I$ S1 _9 H6 W) J3 F4 G
1.5.4 通用类型转换系统和属性格式化系统
1 t/ j/ b$ _8 {8 Q: x; [% ?: e1.5.5 数据访问层新增OXM功能
0 S; |$ b( h7 H& p1.5.6 Web层的增强
' s! n; i1 k1 O! C5 I- T1.5.7 其他; F6 W2 g. U T
1.6 Spring对Java版本的要求' f6 k: T$ Q9 t# L0 v2 h w
1.7 如何获取Spring. L1 B, c' m9 @1 \& T# d) S8 D
1.8 小结
0 L8 O; W9 X+ X5 D第2章 快速入门
" S% p9 x3 z% I3 v8 u5 H( z2.1 实例功能概述
5 L i6 X. {! M2.1.1 比Hello World更适用的实例. o% s' S$ K1 Y+ r/ c
2.1.2 实例功能简介9 t" a1 G7 f- T2 ~" F; [
2.2 环境准备
# `" d' L) w1 D- e; _( X1 K' s2.2.1 创建库表
, w" h4 B! B3 I8 X% q" {1 V2.2.2 建立工程5 y; M) I4 |8 D8 X/ m7 B8 d
2.2.3 类包及Spring配置文件规划
2 ^! K9 C H! {, P! f V2.3 持久层3 s8 G' q3 O x0 \6 V
2.3.1 建立领域对象
( K1 j. \% H* h9 P! l2.3.2 UserDao# S! K. `0 C2 `1 C& H) g: n
2.3.3 LoginLogDao9 m# e4 D' M1 a( J; X
2.3.4 在Spring中装配DAO- G9 @+ y* N* J2 F8 s! ~ B
2.4 业务层 d. J3 ^/ J2 ]' y& ?: V9 l
2.4.1 UserService
! P& [ |6 _( h# U2.4.2 在Spring中装配Service
2 |0 @4 P2 ]+ p3 F. B1 y3 B2.4.3 单元测试 r! q$ s# I8 \! t! r t
2.5 展现层
9 G! f2 L" T! P" Z+ F2.5.1 配置Spring MVC框架
; u5 ^$ }" x0 @; i. y2.5.2 处理登录请求# C- y: k$ e. }. y4 w+ P2 X8 ?
2.5.3 JSP视图页面
3 p( j& }* s# }1 B+ c9 o2.6 运行Web应用% H- y# y6 p, E% A, v
2.7 小结
7 U2 z) t7 w: G' j' D, A0 C! N% ?0 z4 Q7 y+ `7 V/ Z
第2篇 IoC和AOP
& U1 W3 j) G, r+ ~第3章 IoC容器概述
$ F+ k* Z( q7 W7 @3.1 IoC概述9 f5 N; x' v& g
3.1.1 通过实例理解IoC的概念! g" s! [$ s( J
3.1.2 IoC的类型8 \2 C; t* K" b$ T; L1 w, T% f
3.1.3 通过容器完成依赖关系的注入
6 p% W7 j! Q# |) E3.2 相关Java基础知识
# t2 G) n2 ]( o: Z* [6 d: D3.2.1 简单实例
7 T h; V6 z7 A1 P7 }' g' q! K; u N3.2.2 类装载器ClassLoader: ?) i |# Q7 h
3.2.3 Java反射机制" s- S9 X* ]& W! [6 ^2 C* q1 r
3.3 资源访问利器
+ E/ x* E+ i6 P) ]: Z! F" U! s1 y; a3.3.1 资源抽象接口6 n, ^1 h' t% c# M5 V- q% U, g# i
3.3.2 资源加载. T% ] l: i. d! ^. ~- q
3.4 BeanFactory和ApplicationContext
# }" I& T2 J! Z( y# g2 Y/ j3.4.1 BeanFactory介绍
" Q$ {" N/ U& O0 k9 _3.4.2 ApplicationContext介绍6 g+ S6 r( x( Z r
3.4.3 父子容器- I) Y! o$ t/ s
3.5 Bean的生命周期
# c* i2 ?" O; n/ }" M, x" x) n3.5.1 BeanFactory中Bean的生命周期( E# S7 T- e* q' K/ `
3.5.2 ApplicationContext中Bean的生命周期
6 @0 m- S2 m& W2 P3.6 小结
) t& E. M. {4 \0 s- f3 a. q: K第4章 在IoC容器中装配Bean
6 |: k4 J6 }5 k9 N4.1 Spring配置概述% A6 o( Y3 B/ g( Y
4.1.1 Spring容器高层视图
6 H! P8 f8 }6 M+ @3 ?4.1.2 基于XML的配置
4 `* r3 L- V- Z1 @( p4.2 Bean基本配置
7 I7 V% r+ R/ _; l2 w' G4.2.1 装配一个Bean
' N: k' o& i, r6 `* W; ~, d4.2.2 Bean的命名. y* q- Z. [$ ?: T' {8 e
4.3 依赖注入
. p: H$ j( o$ I+ J4.3.1 属性注入/ o" f5 G ~! ^8 l0 {# |8 v
4.3.2 构造函数注入
% }% S3 F6 [& L1 K( W4.3.3 工厂方法注入1 \9 k' B, f8 R: g( n: K8 `
4.3.4 选择注入方式的考量
# E* c" H) p4 e5 s4.4 注入参数详解
# a, n0 F A% a$ [) K0 g7 N* p5 j4.4.1 字面值& H1 o, Z8 @7 V7 X6 t" i' M+ p
4.4.2 引用其他Bean
5 b+ b. p9 M' t, d* v4.4.3 内部Bean
- }8 e/ s; N. A, I4.4.4 null值
% a. d8 ~( [* Q* j: d. [4.4.5 级联属性
2 }( ?( F7 F1 E3 b' A4.4.6 集合类型属性8 I# s/ [8 r! i6 \
4.4.7 简化配置方式
8 g( d2 n7 }& B, m/ C' `4 |4.4.8 自动装配
' M: b: M% o1 O/ t+ h4.5 方法注入
1 R, K- r* T/ L% g! a- e4.5.1 lookup方法注入
# w* ^7 v2 j0 v5 A4.5.2 方法替换
" ]2 J% _3 i( P; ~, Y4.6 <bean>之间的关系
3 `7 ]- |) I0 q2 G! y4.6.1 继承; O$ x* I9 @6 D! b; ]
4.6.2 依赖
/ S* T0 ]7 X/ N: ]/ w2 [4.6.3 引用
- J" R# ~$ _4 h* C: @* H4.7 整合多个配置文件
/ d) `/ n, j5 |# Q4.8 Bean作用域! }2 t1 G) u! k% m0 ]( U
4.8.1 singleton作用域
$ @3 X" l/ ]0 J! H9 R4.8.2 prototype作用域, X" T# m4 j! d- w) N
4.8.3 Web应用环境相关的Bean作用域
# b8 b* G! U7 h! C3 \4.8.4 作用域依赖问题/ b+ _( [; ]4 @
4.9 FactoryBean
t* C2 i' |5 `" e' \4.10 基于注解的配置
2 M$ ~4 m- V# I* C- @1 M3 q4.10.1 使用注解定义Bean$ s F7 Y M% r7 d
4.10.2 使用注解配置信息启动Spring容器- p9 y! s$ l) G H: |
4.10.3 自动装配Bean8 ]0 ^0 H, C! c; J
4.10.4 Bean作用范围及生命过程方法& y" O R' u1 d$ K$ t2 L" Y2 v
4.11 基于Java类的配置
6 I% U2 U! \: J0 h* Q4.11.1 使用Java类提供Bean定义信息0 u3 d' D) [( g% J# b) n% E! ?
4.11.2 使用基于Java类的配置信息启动Spring容器 ]& R: Y& ^# h' n4 z* n8 Y$ q. l6 R
4.12 不同配置方式比较
# U7 U& i& G* k4.13 小结
2 g; j+ x) ^3 `6 w* h: }第5章 Spring容器高级主题' c. Z& C1 x1 P
5.1 Spring容器技术内幕' ?2 [3 M' m6 e. }% L
5.1.1 内部工作机制0 E) S9 Z0 @0 i! G% b7 S7 u
5.1.2 BeanDefinition F$ i: G" J8 _
5.1.3 InstantiationStrategy
) H, W! _) z* S( }" H7 p7 T5.1.4 BeanWrapper: g4 k# i5 B+ R: y" b$ F0 r
5.2 属性编辑器
" U" d+ Q6 v# i5.2.1 JavaBean的编辑器, {- E, P$ X( Z& i
5.2.2 Spring默认属性编辑器# i" K# F0 q! j# z
5.2.3 自定义属性编辑器4 n, Z( u$ q, c9 R( f! L' L8 `7 M
5.3 使用外部属性文件1 J% V- X6 X4 v; c- |9 q+ A6 e
5.3.1 使用外部属性文件0 ~ Y, Q' f& T# S# Q
5.3.2 使用加密的属性文件" q3 e3 ^% h8 H1 a
5.3.3 属性文件自身的引用
* _% w4 @8 X" K |5.4 引用Bean的属性值6 v9 M3 T2 F3 v
5.5 国际化信息
% O. t& w ~) {- v, t& D$ X5.5.1 基础知识
% ? \, {) G I& t) i' \5.5.2 MessageSource" @3 _0 M% ^/ [5 ~4 z, |
5.5.3 容器级的国际化信息资源
9 W- a2 _/ M- K/ I5.6 容器事件
! m9 N( P1 v" k% ~' h) w5.6.1 Spring事件类结构0 T K, t1 p5 O0 l$ i
5.6.2 解构Spring事件体系的具体实现
* i- D! { h; ]7 V5.6.3 一个实例9 L/ A2 r2 s' T) A) T6 ~
5.7 小结
8 a: |+ J5 a+ o3 a第6章 Spring AOP基础
4 _ P- R' t) n/ y6.1 AOP概述2 ]2 A% _/ b3 R9 H
6.1.1 AOP到底是什么
- N t: _1 Z+ d: @1 A6.1.2 AOP术语. x+ _" j4 L7 k' @8 H) W
6.1.3 AOP的实现者
# s# q4 }) T& l5 P. S6.2 基础知识
2 e( w( c# A) I. N4 J+ r6.2.1 带有横切逻辑的实例
1 i$ h' W! F- S% M6.2.2 JDK动态代理
- y& m. d0 g' O" f) l: _+ [' X6.2.3 CGLib动态代理/ Z+ Z* s$ d6 J2 t
6.2.4 AOP联盟
0 R; W' P2 G! ~& j, g6.2.5 代理知识小结1 H+ P" O# [+ O3 j+ \4 |' L
6.3 创建增强类
) u3 B5 |2 X( ?/ y M9 H6.3.1 增强类型+ ?) V2 z, f; E3 \8 ?0 l( U' W
6.3.2 前置增强
7 T" f* q4 l1 |4 S5 e4 z: u6.3.3 后置增强. U! m+ i0 L0 v0 d3 w9 n& j
6.3.4 环绕增强
1 R: v l0 A S6 F. l- `6.3.5 异常抛出增强3 K7 Z" X! }% W4 k' P4 l
6.3.6 引介增强* b' u, i# u: f& w6 n
6.4 创建切面+ c8 g0 C0 F+ r6 w) m. c% v7 P
6.4.1 切点类型
0 J* ~+ l( |3 t `1 S" \* r6.4.2 切面类型
+ _% R5 L, `2 X# O6.4.3 静态普通方法名匹配切面
7 H0 X( B9 c( n; @6.4.4 静态正则表达式方法匹配切面
6 T3 S4 m/ S" c3 \! H; e6.4.5 动态切面$ o! d) v; W! `( w2 o
6.4.6 流程切面; y; i! n3 Z4 D" }2 w* E
6.4.7 复合切点切面; r/ }: F) @5 ?; L h2 y
6.4.8 引介切面$ e# h* j: d1 [$ b+ v
6.5 自动创建代理$ h# J$ L5 z8 }
6.5.1 实现类介绍1 U! W% n- Y# Y
6.5.2 BeanNameAutoProxyCreator
/ o6 ~+ Y0 d+ {6.5.3 DefaultAdvisorAutoProxyCreator
9 |9 L2 W* c( \* V+ v- x, B- z; ^6.6 小结
8 Q$ K9 }5 r G, V" K第7章 基于@AspectJ和Schema的AOP
0 J2 d4 i0 _, }0 l+ t7.1 Spring对AOP的支持
8 J( n! K) ]' z# a# A( s* e7.2 JDK 5.0注解知识快速进阶
8 W( M$ u2 A* J' J8 ? }! ] a F7.2.1 了解注解
7 Z5 ~. E: h+ e3 @( Y7.2.2 一个简单的注解类
9 J! V+ S* v: r: r- }7.2.3 使用注解
1 z/ F# N3 x5 x7.2.4 访问注解- s( S3 B6 R0 i0 p# r
7.3 着手使用@AspectJ) F; C" _6 N/ n; W3 H
7.3.1 使用前的准备
$ j4 ^7 V! P0 ?# s F- s! ]7.3.2 一个简单的例子
: r( @' y7 @; ~ G+ E, f3 T- y* U7.3.3 如何通过配置使用@AspectJ切面
' ?! P9 E& t4 V: Q$ n7.4 @AspectJ语法基础
0 {! n: j+ L6 j1 ~* [7.4.1 切点表达式函数: \6 ^6 i' t1 g/ h- {5 i
7.4.2 在函数入参中使用通配符6 u+ `3 Q; g$ M) K; f3 c+ k3 ]
7.4.3 逻辑运算符
( M# F2 z2 D- M E+ l7.4.4 不同增强类型
, Y2 R8 {/ j/ V4 E$ ~; Q; N7.4.5 引介增强用法
; e7 L8 X k9 @( z) }! q" s7.5 切点函数详解+ k5 O/ ^ f# \2 P3 x
7.5.1 @annotation()
7 C! x0 Q% {6 U! [9 l8 x7.5.2 execution()' y3 ~, n/ W9 t A' Y0 k+ h
7.5.3 args()和@args()
2 R; Q0 |; o0 z, F! k4 ~! g7.5.4 within()( R* Y! ] L8 V0 r* O8 C
7.5.5 @within()和@target()
% j$ d; m/ D5 u5 E: d; ]6 A4 D7.5.6 target()的this()* C5 l& D1 ]* d8 i3 C: {$ p) n! w
7.6 @AspectJ进阶
9 o3 K0 ~. C' K A; Y7.6.1 切点复合运算' K% q& w% C) w4 Z* B7 `
7.6.2 命名切点! r) y/ I# G i
7.6.3 增强织入的顺序! ]+ }) y2 {' T, ^0 P* @
7.6.4 访问连接点信息. {: ?" U* E6 T9 S( c2 `
7.6.5 绑定连接点方法入参
& p& D8 U% g, M7 ]7.6.6 绑定代理对象
8 I6 o) D* @$ ~; \+ c7.6.7 绑定类注解对象
! E5 H" i$ |' E, x5 B7.6.8 绑定返回值
2 F+ R9 }' M R9 S5 ]' A8 E7 j7.6.9 绑定抛出的异常" O2 j: Z+ c4 h) k; z7 k& L5 ]& J7 w
7.7 基于Schema配置切面/ f, F. N" O( v& R
7.7.1 一个简单切面的配置$ m* Z! Y3 A( W- d) }6 f* O# f
7.7.2 配置命名切点
7 I9 Y2 b4 f8 ~7 H- b8 J7.7.3 各种增强类型的配置
- D7 ^! `' `; S0 a7.7.4 绑定连接点信息
$ u N n. R I/ |7.7.5 Advisor配置5 U( Q2 h1 K; F' m
7.8 混合切面类型
" G0 V9 ?2 D0 A# J5 s7.8.1 混合使用各种切面类型
9 T; ^) S2 N+ t$ Q5 J7.8.2 各种切面类型总结, T' R# K& F2 n' [7 t: ^ A5 c
7.9 JVM Class文件字节码转换基础知识
6 S1 ]2 m7 U/ Q0 f* `7.9.1 java.lang.instrument包的工作原理( l0 o' F' ]9 C
7.9.2 如何向JVM中注册转换器0 ?* l' n. u- r5 W
7.9.3 使用JVM启动参数注册转换器的问题
7 G& u& G* J, [- R7.10 使用LTW织入切面
9 \1 u6 a3 V2 ]$ E7.10.1 Spring的LoadTimeWeaver
- j, ? h; R" H( {! ^! j; Z' P7.10.2 使用LTW织入一个切面
1 {! S" p1 J8 V" A7.10.3 在Tomcat下的配置" F$ q! \; y- @4 z" @6 u
7.10.4 在其他Web应用服务器下的配置7 Q& L8 b) F1 y! P$ v! ]
7.11 小结
- W5 p3 h9 f6 Y4 [
0 r) n! F7 r4 e3 B+ q) l第3篇 数据访问( [2 b( j/ c/ F# p+ Q7 h! q
第8章 Spring对DAO的支持# R4 ]9 b, J/ g2 B
8.1 Spring的DAO理念: K4 o# g' }9 l9 I! {8 [
8.2 统一的异常体系8 c h# w( ], P& l$ u! P
8.2.1 Spring的DAO异常体系
, b8 Y- X2 m1 Q8.2.2 JDBC的异常转换器
9 t/ S9 R/ p- B+ O/ i8.2.3 其他持久技术的异常转换器
# J% b- W& L1 d# J2 B- ^8.3 统一数据访问模板+ H! b' D+ ~3 V/ _ g' C
8.3.1 使用模板和回调机制8 f% R& d0 W- o
8.3.2 Spring为不同持久化技术所提供的模板类
8 w2 i( L9 q2 B7 t3 f8.4 数据源5 W; ]0 U" E0 r0 ~8 X' q8 G2 @
8.4.1 配置一个数据源
5 v- c" @5 E5 c& g8.4.2 获取JNDI数据源
5 ?. V0 |. Z/ c: o4 p8.4.3 Spring的数据源实现类) ^8 H9 e/ D1 T# Z; O0 X
8.5 小结
" }& P8 p f! {$ J. \, |2 j5 X" ^. t/ l第9章 Spring的事务管理
) q$ e( t! \6 V) L9.1 数据库事务基础知识
. z! s( Q0 ^* y( m8 \9.1.1 何为数据库事务
1 t1 m7 X/ K( I6 B0 c) K5 `" ~4 e% {9.1.2 数据并发的问题! `2 X1 ?* t) _& {7 Z" t
9.1.3 数据库锁机制; T) V, \0 A) W+ ^ X. _2 l/ i
9.1.4 事务隔离级别& s s" x7 ^$ J! z! g' C6 a
9.1.5 JDBC对事务支持5 S5 {3 v; d+ w- U+ L
9.2 ThreadLocal基础知识
c9 n1 H2 H: l* A+ A- ?9.2.1 ThreadLocal是什么
# e. N: Y/ J1 Q9 m- ^9.2.2 ThreadLocal的接口方法& a- E* U( n" Y% q( [
9.2.3 一个TheadLocal实例2 r; b' E$ ]& |3 K+ i
9.2.4 与Thread同步机制的比较
) d# C- Q7 ]9 W R1 n( F0 b. m! y9.2.5 Spring使用ThreadLocal解决线程安全问题 M1 \# b% L, r9 d D5 x
9.3 Spring对事务管理的支持/ {! C' O: H; ?: {) P, Z
9.3.1 事务管理关键抽象
5 n$ [* ~6 t+ [0 _5 E! p: k. N9.3.2 Spring的事务管理器实现类
0 ~+ {: K. z$ O. b! d9.3.3 事务同步管理器
' H- u8 i. V3 Y |9 ?# ^6 d9.3.4 事务传播行为" v# ] D# m- ^- J! @7 I: A, }3 ]4 `4 @: }
9.4 编程式的事务管理4 X; W; U' }) a' O0 \# u- i
9.5 使用XML配置声明式事务
! j; e% t+ L2 [' e8 [' B9.5.1 一个将被实施事务增强的服务接口
( p" N' l& s5 A8 E' y8 J3 F9.5.2 使用原始的# y( D! Z- ]' u/ V$ ~# r, V0 e) E
TransactionProxyFactoryBean8 G- o9 j& m, p
9.5.3 基于tx/aop命名空间的配置9 S! G- i5 Y) R# H6 _! F
9.6 使用注解配置声明式事务
/ _- z! h% _5 \9.6.1 使用@Transactional注解7 P6 z( k) k6 o4 s. ` I
9.6.2 通过AspectJ LTW引入事务切面( ~2 M4 L1 o( {: _& f% X
9.7 集成特定的应用服务器2 X$ A: |1 z) u0 Y4 a
9.7.1 BEA WebLogic6 y/ x" w; `9 R% W
9.7.2 BEA WebLogic
& `/ [' e6 o. P" D; C+ q9.8 小结
* ]6 i* ~0 V1 F3 k第10章 Spring的事务管理难点剖析
: H) p" L$ a+ V/ o10.1 DAO和事务管理的牵绊
' R. @ ?* ^6 ]) W4 a" i* c10.1.1 JDBC访问数据库
# v c% v" s7 U# P% R% l10.1.2 hibernate访问数据库6 b H# e+ A% T1 u; d$ ^2 r9 W
10.2 应用分层的迷惑1 Q' m+ O1 I) Y! m
10.3 事务方法嵌套调用的迷茫
+ S6 R% r0 j: s5 B) O o* f' E10.3.1 Spring事务传播机制回顾* M4 E. m4 \% ^! i9 s$ f% T1 q
10.3.2 相互嵌套的服务方法- r5 D% I1 ] q9 c' U
10.4 多线程的困惑# E- R" F9 {6 \5 F% t
10.4.1 Spring通过单实例化Bean简化多线程问题
; t) \; N( m2 K9 N10.4.2 启动独立线程调用事务方法
1 r0 j4 n) D8 s2 K; X10.5 联合军种作战的混乱+ x5 \3 u$ E( E6 q- I) X" Y9 }' C
10.5.1 Spring事务管理器的应对
2 I" R* U7 m6 w- b1 s10.5.2 Hibernate+Spring JDBC混合框架的事务管理
/ f) a8 C8 ~6 E$ w4 P4 @10.6 特殊方法成漏网之鱼
% T4 o1 v( i. b' l10.6.1 哪些方法不能实施Spring AOP事务
: C* d7 d- d0 g) v& U9 O4 Y10.6.2 事务增强遗漏实例0 R# p6 K4 Y! q3 R
10.7 数据连接泄漏
* d! }+ Q$ o8 C8 K7 _, b' |10.7.1 底层连接资源的访问问题
) U" x( c$ b- g/ W) R: T9 n10.7.2 Spring JDBC数据连接泄漏
/ H. e- D* z% |" b# C1 l, h$ o9 g10.7.3 通过DataSourceUtils获取数据连接
5 e; `- u x: {3 V10.7.4 通过DataSourceUtils获取数据连接0 c( W" e% u: j. l& A
10.7.5 JdbcTemplate如何做到对连接泄漏的免疫' A y- r! Q* B8 t
10.7.6 使用TransactionAwareDataSourceProxy- G* \0 f9 F8 N5 a
10.7.7 其他数据访问技术的等价类# [4 }; X& m: L9 f. \- N7 I6 D# j
10.8 小结
/ {0 [3 v: `& Q0 J/ R4 r. X" }第11章 使用Spring JDBC访问数据库) N+ h. I+ B% y F" T) y& r& V' b
11.1 使用Spring JDBC
7 Y. \0 j! _* A2 |11.1.1 JDBCTemplate小试牛刀; y7 Q' b& ^$ y( d
11.1.2 在DAO中使用JDBCTemplate
9 D/ R5 O! h. T& f/ U& f9 X7 [11.2 基本的数据操作
" y+ t# R/ S+ O% q+ i9 B11.2.1 更改数据% p- P+ i/ ~: ?* ~; I
11.2.2 返回数据库的表自增主键值- E6 h) O- Z4 v
11.2.3 批量更改数据
! _) O+ u9 i' j9 V' P7 H- v6 l9 x11.2.4 查询数据" u; L* L1 y' N' p' l% D
11.2.5 查询单值数据) k8 ^4 X2 I) e9 i% G. g
11.2.6 调用存储过程' [) b1 d" E. M1 W0 S- I
11.3 BLOB/CLOB类型数据的操作
; F5 d- G2 I3 f0 v% V11.3.1 如何获取本地数据连接
) i, r9 | B( y4 }/ ]' i11.3.2 相关的操作接口
0 w! x% @9 e# ?3 j: S) I3 W/ D11.3.3 插入Lob类型的数据3 z9 G( I; Z3 i
11.3.4 以块数据方式读取Lob数据: F K1 Z+ D! h9 D+ [# m8 Y% B
11.3.5 以流数据方式读取Lob数据8 f5 e) e! ?/ l* w; X
11.4 自增键和行集
/ W( M# F' ^3 N* z* M8 A5 K11.4.1 自增键的使用
8 m; X# R( k. h$ P$ p, _11.4.2 如何规划主键方案5 ]$ M9 ]& k0 e( h- P
11.4.3 以行集返回数据8 I2 X; |8 i$ C7 _# a4 A5 H3 \" c& g1 {
11.5 其他类型的JDBCTemplate
8 O- t" B, g5 ~ k3 o" V11.5.1 NamedParameterJDBCTemplate
9 ^% Z2 s! @( C, B4 N11.5.2 SimpleJDBCTemplate
5 }" d: ]% D: x& |3 m- W' [9 E11.6 以OO方式访问数据库. [1 G/ B" E* O5 s& M
11.6.1 使用MappingSqlQuery查询数据" m: K% a( K! T; G0 `8 P6 e3 s
11.6.2 使用SqlUpdate更新数据0 k" q2 d3 C% `* E9 P
11.6.3 使用StoredProcedure执行存储过程
- l P* j1 E6 z/ W; {5 }. J11.6.4 SqlFunction类
& o" o1 H% D8 q3 c' w8 Y11.7 小结( k. I0 }# j9 k1 q9 V% J2 F
第12章 整合其他ORM框架! ^* G8 c- T* ~/ a: V8 t+ M
12.1 Spring整合ORM技术7 R/ A/ V+ S- j
12.2 在Spring中使用Hibernate
+ u! n- W: a4 j$ \+ L# G* J2 B12.2.1 配置SessionFactory
y6 z" u6 V/ Q1 ~% s12.2.2 使用HibernateTemplate
* m4 J! ~. s; W12.2.3 处理LOB类型数据# c4 {+ f+ P0 U- |0 g6 b/ T, |
12.2.4 添加Hibernate事件监听器' Q, g& h8 X7 U8 d3 v
12.2.5 使用原生Hibernate API/ Z% V. h% o& r2 r j& g- _
12.2.6 使用注解配置
4 \/ s6 K D1 {. y12.2.7 事务处理
( D3 G1 d8 x# R0 D+ F4 f4 x5 R12.2.8 延迟加载的问题
, Q# b1 k% @. [9 r. G; m12.3 在Spring中使用myBatis
3 b5 b. F0 }# `" D4 C12.3.1 配置SqlMapClient3 ~( E! _* S; A5 h8 s/ s* t: E
12.3.2 在Spring配置myBatis, }/ j7 Y8 @) q$ D( ?$ v% L- x
12.3.3 编写myBatis的DAO
+ W! G" n- K' `# {! m12.5 DAO层设计
7 D3 n) E/ j& {0 U. \12.5.1 DAO基类的设计4 a/ |: q# j% x$ N3 U
12.5.2 查询接口方法的设计 c' r% h9 P- E7 S. ?& i+ M
12.5.3 分页查询接口设计* r: J9 O" D' A
12.6 小结
- B9 e4 t$ X7 y2 g1 x/ Y# @( C, B' X- G0 K1 `$ ]% J- f# v8 l
第4篇 业务层及Web层技术# y9 g0 P3 @ O7 y2 ?$ R& y: ?* a
第13章 任务调度和异步执行器
' `0 \0 p- h, W13.1 任务调度概述
' I" K$ P7 o6 I13.2 Quartz快速进阶% ~- z# x7 v" b
13.2.1 Quartz基础结构
2 }! C6 q* Q. X0 f3 `8 t& C, d13.2.2 使用SimpleTrigger% D- h# m! n: b) h2 J( l
13.2.3 使用CronTrigger
' C9 ]6 D$ R1 ]$ g2 A$ I. X13.2.4 使用Calendar
( b( {. d% ]4 _13.2.5 任务调度信息存储
8 i5 x4 K- r4 Q* E) s5 h8 L13.3 在Spring中使用Quartz
, Y- ?! V6 Q. ~$ s' u' n0 [13.3.1 创建JobDetail
% ^( Q: z9 G7 n _9 q' ~* w) C13.3.2 创建Trigger' n+ M" y* H/ |* ?
13.3.3 创建Scheduler
; D. {0 B7 f/ M0 T! \13.4 Spring中使用JDK Timer( \* s. L' H. t4 a$ q
13.4.1 Timer和TimerTask
1 e& |' e8 N2 `) m1 s13.4.2 Spring对JDK Timer的支持
% I& N! {' _0 U, L+ _9 Z4 w5 b13.5 Spring对JDK 5.0 Executor的支持
! r B& ?* d$ P$ \13.5.1 了解JDK 5.0的Executor& a) u8 x% E! f3 \/ q% Q4 U% M$ w
13.5.2 Spring对Executor所提供的抽象
1 t+ S: {5 B4 Q- C. @1 S: v1 C13.6 实际应用中的任务调度
. n3 D0 T: m O V13.6.1 如何产生任务' ~$ Q! F- s2 v4 }0 t
13.6.2 任务调度对应用程序集群的影响% V$ B0 k( p/ W5 y Q1 p# y- g
13.6.3 任务调度云, ?% a% J9 i% q6 o: u j
13.6.4 Web应用程序中调度器的启动和关闭问题7 V- n+ U# Z, Y3 e* S( V/ d0 v
13.7 小结4 L, w' N/ Q6 {/ D5 X, s
第14章 使用OXM进行对象XML映射4 Q6 |" ]5 N' d. n, ~- o; n
14.1 认识XML解析技术
% e- [, I% }. N2 J% j( b14.1.1 什么是XML' L6 M! P7 B/ J$ G! s" R
14.1.2 XML的处理技术
8 i/ t D0 K l/ Y9 X14.2 XML处理利器:XStream; U5 n' h O% N8 N/ V0 a# r, b/ p
14.2.1 XStream概述
. U8 K% c3 Z% J; @6 Y3 l9 Y- r5 P14.2.2 快速入门) y- T& X: I V0 T, g2 t
14.2.3 使用XStream别名
6 O; G4 \ I, G1 O ^; R3 N' v14.2.4 XStream转换器
2 q+ r0 i1 Y9 `$ k14.2.5 XStream注解0 k [+ e/ ]% x) I! P) h/ l
14.2.6 流化对象
' J# z9 [2 M3 o14.2.7 持久化API
; Q9 G- g0 i0 v9 ?6 w14.2.8 额外功能:处理JSON
% U$ v; x' w& g- k% M# L/ _8 k14.3 其他常见O/X Mapping开源项目 F+ m" x: q& o4 d, w& k
14.3.1 JAXB! y) p( _; }( c0 u9 `# i5 B o
14.3.2 XMLBeans4 I6 a( V3 D0 `' D6 u
14.3.3 Castor
2 G) b8 j7 S5 p- a8 [7 l# U$ Q14.3.4 JiBX
6 }8 C. U* Y0 c14.3.5 总结比较
- m( H' R2 t3 y! k- o* G# M9 z14.4 与Spring OXM整合" n; \. ?& `& e H A
14.4.1 Spring OXM概述6 n, |, \0 B/ {2 Z" c2 ~
14.4.2 整合OXM实现者
8 A4 _( _4 k+ R' ^, ]14.4.3 如何在Spring中进行配置
1 h6 k9 N2 R d* t$ q+ D) v14.4.4 Spring OXM 简单实例
0 g' c" O5 c) [# i4 I; c3 N, W14.5 小结
) `4 U% x4 H7 n+ k# |8 `7 T3 J第15章 Spring MVC3 f" P) C; m K B7 L/ D( T' e/ \
15.1 Spring MVC概述- l a) U( P i1 ^9 w o* ~: t
15.1.1 体系结构
( R# x. Y3 D7 R3 a15.1.2 配置DispatcherServlet
4 D: S: I! `3 a: B15.1.3 一个简单的实例 R$ g7 A1 a# h5 w: c
15.2 注解驱动的控制器
6 x; Q1 ]0 F0 g15.2.1 使用@RequestMapping映射请求
# G* G' W8 C7 [5 a8 l15.2.2 请求处理方法签名概述
; z1 s5 Z; `! W% [6 v1 G7 {- x15.2.3 处理方法签名详细说明' a ` m' f8 o0 a
15.2.4 使用HttpMessageConverter<T>. U- c; n& W8 V7 b* k' y" W& ^/ T- o5 z
15.2.5 处理模型数据
3 E7 Q4 x1 b% G# ^; Y' O15.3 处理方法的数据绑定5 `: R) u$ s- N! _4 s2 _0 [
15.3.1 数据绑定流程剖析& ?6 `6 \% Z! K4 l) c, d
15.3.2 数据转换& N6 Z1 o2 H) c# G9 C# `- R; R [
15.3.3 数据格式化% C7 E% D; P$ n9 o- f( W, M' k
15.3.4 数据校验5 I+ f* c' s$ B- s: h% O
15.4 视图和视图解析器
- G9 |; t: C1 _2 e15.4.1 认识视图
. H7 e1 t" ^7 g% g15.4.2 认识视图解析器
1 E/ d5 l3 ?3 I. X# w, H15.4.3 JSP和JSTL
. B# M2 \+ H: a6 {1 d# f15.4.4 模板视图
% `1 ?8 T6 a4 g15.4.5 Excel
- V) `+ I+ G0 N2 ~5 E15.4.6 PDF
& A, d. b l8 O15.4.7 输出XML
6 @/ Q# m: Q3 @" T/ f15.4.8 输出JSON
1 J! w- i+ w- b3 E: Q( w# c15.4.9 使用XmlViewResolver
& }. {! ]! Q6 w; w7 R- i" I; B15.4.10 使用ResourceBundle ViewResolver
1 k$ P1 e$ L- T3 @* |15.4.11 混合使用多种视图技术; S: ?: I9 l( r7 e4 m6 [3 e. {/ K4 y
15.5 本地化解析6 z( _. x% i4 I7 l5 e/ l( C
15.5.1 本地化概述
3 Y# M5 D: s0 v! H15.5.2 使用CookieLocaleResolver
+ S2 H2 u& t2 O15.5.3 使用SessionLocaleResolver' u6 m' u5 {+ D H& J% ~
15.5.4 使用LocaleChangeInterceptor9 e' K! ~3 k1 i' `
15.6 文件上传
# Z. Q. R; M" r0 \% F( }15.6.1 配置MultipartResolver
' d8 o( j( A! ?15.6.2 编写控制器和文件上传表单页面
) P, q8 \5 |% h3 d15.7 杂项
/ z9 Q* J. d9 B4 `% f" c& G15.7.1 静态资源处理
& k, E% }5 a: i! z0 W15.7.2 装配拦截器# x# u6 b, Z8 G' D! w [
15.7.3 异常处理; F$ m7 [+ W0 e& ?9 b; h) u
15.8 小结
W" Z- I. s2 Z1 w1 C# B- z! g7 O* T6 q! r' n' f
第5篇 测试及实战) {! M3 w' D: A5 K
第16章 实战型单元测试$ x) c2 x T: Y4 K( q
16.1 单元测试概述% n3 O& p7 N- L* C n
16.1.1 为什么需要单元测试: o2 p X$ ?0 \( g1 v* ?/ N8 k% ?
16.1.2 单元测试之误解- i6 {; e/ `4 W4 j" F2 w% |
16.1.3 单元测试之困境
* A2 Z% ~6 O$ w5 K( C1 K' d16.1.4 单元测试基本概念/ a) u0 Y* T; _7 ]2 A$ O: ~7 l. d! p
16.2 JUnit 4快速进阶! O: K! t6 ?9 y `
16.2.1 JUnit 4概述/ W8 D8 u" t0 k m
16.2.2 JUnit 4生命周期
% r- }+ y- r, @2 e1 r16.2.3 使用JUnit0 L$ s. ~# K) o' K- G" C, G
16.3 模拟利器Mockito
& Q, f+ |+ ~& z; F( B/ a+ G16.3.1 模拟测试概述$ }; P; U" F9 N$ r+ G2 L
16.3.2 创建Mock对象/ F! q" Z( N! u' j6 g
16.3.3 设定Mock对象的期望行为及返回值% K5 Z: L1 A; {
16.3.4 验证交互行为
7 C) W1 t* q/ I) S G& U16.4 测试整合之王Unitils2 ~/ g3 n, G' N$ b$ D j
16.4.1 Unitils概述' j3 s$ N" N% u; L2 w$ ~% }9 v) l, ^
16.4.2 集成Spring
* i5 R0 F: A$ L i7 T; j1 G: g16.4.3 集成Hibernate
2 M1 z: |8 ~2 Y16.4.4 集成Dbunit
6 ^$ @ \. Z$ A, T9 s' Y16.4.5 自定义扩展模块* V& C. I; A( y* u4 E6 b
16.5 使用Unitils测试DAO层
. y/ q j2 ]$ p6 S' {5 h16.5.1 数据库测试的难点
$ r( u X5 A: Y3 @1 h6 S16.5.2 扩展Dbunit用Excel准备数据
6 s2 ?6 p7 S. u' }8 D9 {% G, G16.5.3 测试实战
& l/ Z4 k0 B9 C, R16.6 使用unitils测试Service层 T4 W7 W) N# }' F
16.7 测试Web层6 J4 `- y$ @0 K( s. C5 X! `8 p5 Z& c
16.7.1 对LoginController进行单元测试+ j" i! {0 y. z2 O/ `' O7 u
16.7.2 使用Spring Servlet API模拟对象
$ ~9 S) C5 X5 p D' ]16.7.3 使用Spring RestTemplate测试) R- c' J M3 w& w8 N/ J
16.7.4 使用Selenium测试
3 u1 R8 |$ V5 X% X! o; V16.8 小结
( f# _- E# w# n+ \3 H" i8 q: C第17章 实战案例开发/ v+ o. J8 T2 z7 X" V
17.1 论坛案例概述
$ \/ c/ {6 w" O17.1.1 论坛整体功能结构 \+ q, U- `. `4 G0 H
17.1.2 论坛用例描述
0 D# C/ F' r" k, c4 V- a2 P17.1.3 主要功能流程描述7 \, q6 K, N! F& d' |* _9 S
17.2 系统设计
! w# O4 q- n% b. V) B17.2.1 技术框架选择
7 M) k# k c9 V17.2.2 Web目录结构及类包结构规划# y9 t; _6 P4 T& B- v }$ y1 `
17.2.3 单元测试类包结构规划
2 s4 o; c4 y" A9 W5 r17.2.4 系统的结构图8 o* `/ T2 H8 P: F' @0 ?
17.2.5 PO的类设计
; d. U/ P6 M& x17.2.6 持久层设计
+ G( B7 @0 m# E0 \9 k0 y+ c17.2.7 服务层设计
# q( L7 ?4 K" U g& u, a17.2.8 Web层设计
' {/ r- \/ s- L1 ]1 \: x% u2 U17.2.9 数据库设计
0 R E2 C1 B5 S" Z17.3 开发前的准备+ ~6 b$ V( a( X+ w6 H6 V
17.4 持久层开发, K( v9 Z9 ?1 v! U
17.4.1 PO类
7 {( _% E1 o2 M17.4.2 DAO基类/ V1 m3 t0 z) u% O: [0 {, m
17.4.3 通过扩展基类所定义DAO类
% \6 g! o: j" F E17.4.4 DAO Bean的装配' t: d1 u% v( [$ Q) k% F% R1 o3 ^
17.4.5 使用Hibernate二级缓存1 o$ @5 n1 G, d1 g
17.5 对持久层进行测试
7 i4 G( {8 D1 N9 z- E5 _, C l17.5.1 配置Unitils测试环境
% E! j1 ]+ d2 x3 Z3 k17.5.2 准备测试数据库及测试数据0 }" h1 Q5 e/ r4 e
17.5.3 编写DAO测试基类
/ y* X" l( R0 D+ B17.5.4 编写BoardDao测试用例( V: _. r% e8 ~# u* v9 ?
17.6 服务层开发
+ S: J$ |2 O0 A, R2 ~17.6.1 UserService的开发
8 ~& p: v* L: L! p" S" i8 J17.6.2 ForumService的开发7 w4 i6 G/ D, h! Q- U! Y9 y" X
17.6.3 服务类Bean的装配
; v& R, y8 |0 b- z17.7 对服务层进行测试6 V) \0 _1 \5 g4 \ F; v
17.7.1 编写Service测试基类
e: A: q6 }4 b; j: j$ l) e1 C17.7.2 编写ForumService测试用例 X4 O* U5 l- v5 Q/ W/ b. u0 b
17.8 Web层开发
4 w' `% k% F* O5 O- G( s, p! c" P17.8.1 BaseController的基类
- e6 v: r- u& x4 a) }* {17.8.2 用户登录和注销; T% k) z% ~% Q4 E; y7 Y
17.8.3 用户注册
: Y5 X" b1 E* p* |! t17.8.4 论坛管理! ?# k7 h8 v5 K9 N8 h/ [2 O
17.8.5 论坛普通功能
; s, d) K$ _ U17.8.6 分页显示论坛版块的主题帖子
& I$ v% o; T1 X9 H/ [17.8.7 web.xml配置' V- d# f+ S4 u' d# o
17.8.8 Spring MVC配置0 E& h3 l" f+ w' b
17.9 对Web层进行测试
) A- Y" J" z) f: [8 Y `17.9.1 编写Web测试基类
2 {- Y! a8 [1 C- L7 g5 b2 Y; _17.9.2 编写ForumManageController测试用例, `" d8 u# P/ Z7 O D1 h5 I
17.10 部署和运行应用6 j+ \. A% M" H+ a7 e% C
17.11 小结1 F, s" d/ ^5 U) J0 y/ ]
以下内容详见本书配书光盘:
0 G( @7 J8 N$ N- L附录A JavaMail发送邮件
! |# u( }2 j9 l6 e. I2 ^附录B 在Spring中开发Web Service4 u% p i! q- Y
. I. R5 I3 V6 `% iSpring 3.x企业应用开发实战(高清版)5 r/ [1 b. l/ ?3 Z% @* V
X) }0 b! R) ?- \
|; E8 C+ b: j/ k) p4 _# v/ j! z8 H; J; a |
|