该用户从未签到
|
揭示内幕、深入浅出
3 z U' f; Y" V6 }9 B" I }# y# z同步更新、与时俱进
. a4 \6 j/ O2 W5 Z/ N$ g. g' I1 s突出重点,淡化边缘% u7 }. q9 e+ y; U
理论透彻、面向实践
' e$ X* |# ?+ T代码简洁、图例丰富
0 o' j5 ^3 C# e! |1 }注重趣味、轻松阅读/ i8 z# A& [, @, B7 V
相关知识、一网打尽$ |0 W. s9 Q5 `' N# g
历时一载、倾力打造6 w! ?' o$ N1 N( e( ~
=================
/ | N4 u: g4 X O' `spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为java领域第一开源平台的翘楚地位。
) m2 Z, j; y' [% z8 s0 W7 p* A. h Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升应用开发的优雅性。- _* s: {$ P ^5 Z
《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。此外,本书重点突出了“实战性”的主题,力求使全书“从实际项目中来,到实际项目中去”。
# V( I& o, p" {' r# a3 L
===========================================================================================
" F8 |4 N7 @9 }9 R' }第1篇 概述
1 w3 H: _& T" R第1章 Spring概述 s+ v& I) t) B" F* `4 x7 O
1.1 认识Spring/ ^( x4 j( x; }/ ~' P! X$ c
1.2 关于SpringSource3 g: c3 J0 X8 G, N- M3 S+ l+ k2 D
1.3 Spring带给我们什么
5 J5 @# d: _ L! L. k1.4 Spring体系结构3 U! ?& b% q( m# Y
1.5 Spring 3.0的新功能- N8 ]; B6 U0 J1 ]9 t9 c7 ^& l
1.5.1 核心API更新到Java 5.
$ M' m' `+ D, M8 b; l) n1.5.2 Spring表达式语言% \; x! M& D2 Z d
1.5.3 可通过Java类提供IoC配置信息
2 j9 k" u8 w) Y7 X/ d& c- ^1.5.4 通用类型转换系统和属性格式化系统
1 M* |6 Z; I- I* L7 {6 B1.5.5 数据访问层新增OXM功能9 T) \ t7 T6 F/ ^0 f; r+ g% f
1.5.6 Web层的增强2 @8 `; L# q( l9 h
1.5.7 其他
# r0 e5 s+ C9 ^" f; _1 k1.6 Spring对Java版本的要求$ w' U! C' ~; m! w4 Q
1.7 如何获取Spring" c$ `; y* ~% F y! \
1.8 小结
+ N' c& \5 F: s1 _ I6 ]7 F# w第2章 快速入门
2 A4 f' x( O$ Y# n5 v' }$ j2.1 实例功能概述) x% L6 U+ y7 L5 a1 i8 H
2.1.1 比Hello World更适用的实例
0 @" Y- B1 C0 i/ q% v. Z+ Y3 }2.1.2 实例功能简介$ N: P% K6 i9 D
2.2 环境准备/ p7 a6 c1 t+ M. o* F, W0 _# b( z' D
2.2.1 创建库表
) H1 ~' s( F' [) K0 v1 c6 R( t7 E0 P4 I2.2.2 建立工程/ P+ Q- B' T0 h6 T& T
2.2.3 类包及Spring配置文件规划
+ d) N) i, E4 a2.3 持久层5 D' h- b) w3 z* v6 @+ o0 M
2.3.1 建立领域对象- B4 M4 M8 i% V
2.3.2 UserDao
+ O7 X2 D1 Z1 q, v( j2.3.3 LoginLogDao
: b1 t8 V2 b! ^, |2.3.4 在Spring中装配DAO9 Q, T- `5 P; y2 h" Z& H$ I) g
2.4 业务层
+ _- V4 G) W' e2.4.1 UserService
$ \" A: s7 e5 [2.4.2 在Spring中装配Service+ F; w+ v2 t: n: `
2.4.3 单元测试
1 j* W' ~ q4 C" S5 j2.5 展现层
' N/ n9 ^! x8 E9 v! H. |: G2.5.1 配置Spring MVC框架
' [) a$ T' V, Y# i: _' z" k2.5.2 处理登录请求
. v( o6 H7 ^6 X2 {2.5.3 JSP视图页面4 L. T j3 s0 M0 h
2.6 运行Web应用
8 s1 |! R! T- t2 V0 H( O4 P2.7 小结
! a5 N# A3 i) X) Z
) z# h6 E5 w' q8 j( D第2篇 IoC和AOP' l C5 _4 `, C1 v
第3章 IoC容器概述
: U$ U# g% K9 `2 J6 d6 T) [ W3.1 IoC概述
9 X4 m) K- l5 y# p0 b0 C3.1.1 通过实例理解IoC的概念& P( t8 C/ P# Z, u5 f# o
3.1.2 IoC的类型
* n6 Y' A( d6 m# w3 e, z3.1.3 通过容器完成依赖关系的注入
7 K" A) F2 x2 Y3 H2 s" u3.2 相关Java基础知识
" I9 n! D. z: {+ _2 l3.2.1 简单实例
: m' P2 I+ m9 o6 y" I3.2.2 类装载器ClassLoader
2 y- M5 Y8 p1 D0 R) ~# a. E3.2.3 Java反射机制! c5 d/ r! k* Y
3.3 资源访问利器* j/ x9 I7 v( a
3.3.1 资源抽象接口
: P9 Q/ E3 z) B1 e4 ~* m3 K4 A5 E3.3.2 资源加载
& ?& k3 R. a: j7 m/ p3.4 BeanFactory和ApplicationContext% O& v, Z" R. e, D
3.4.1 BeanFactory介绍
: M0 u5 l# \6 T* r; D3.4.2 ApplicationContext介绍
7 a6 \5 H# `7 y2 n% g3.4.3 父子容器: j3 s- H/ ]0 _" v" O; ~8 a9 [
3.5 Bean的生命周期$ }. X# d. {, f' \
3.5.1 BeanFactory中Bean的生命周期5 b9 B0 `: t1 I: V2 e$ L
3.5.2 ApplicationContext中Bean的生命周期1 O2 g. s' M: Y5 \6 B8 _
3.6 小结
- v3 L Y8 n* S7 E第4章 在IoC容器中装配Bean
: K2 v4 I; ~% Z5 Y: X4.1 Spring配置概述/ K [( f2 A0 {% q
4.1.1 Spring容器高层视图
m/ E4 [4 R* o& i) v( W! X0 o- B1 _4.1.2 基于XML的配置
8 c' R$ h- e7 D: B4.2 Bean基本配置
7 Z+ ^% f2 X' F, O) s6 o7 i1 p* J/ ?4.2.1 装配一个Bean5 h" w$ R; {- z( |; K
4.2.2 Bean的命名
7 A) ]2 C/ ^, h* a3 e5 B5 f4.3 依赖注入0 p/ U- {2 v |* \
4.3.1 属性注入
5 k2 C$ X& O% `% ?$ W5 I. Z4.3.2 构造函数注入
2 L# c: T+ {/ a/ K4.3.3 工厂方法注入
- B- r' O* E6 {" S# n4 `: m! t4.3.4 选择注入方式的考量6 e K7 r5 O7 V1 z1 C
4.4 注入参数详解
* c( a0 r4 G9 v: @6 j. A7 g4.4.1 字面值& z! W( X4 M1 t( ]8 ~
4.4.2 引用其他Bean
1 D B% p5 T4 W2 b2 X4.4.3 内部Bean7 G4 G; h5 R& C: ]
4.4.4 null值, O# x7 g+ o, K9 _2 K' @
4.4.5 级联属性/ e, I# n2 F/ z
4.4.6 集合类型属性6 ~' X, [% b1 F" Y
4.4.7 简化配置方式
7 o \. b' J+ s P4.4.8 自动装配
0 P2 z) A. ~4 R1 N! A( d4.5 方法注入. ^$ P" s N$ Z$ ?& U n
4.5.1 lookup方法注入
+ j; k, \ `, p' O4.5.2 方法替换
* f1 k! ~9 p) E1 N, S) Q4.6 <bean>之间的关系7 @' [- k9 c" m: u3 f' {
4.6.1 继承, J* \" [' D C
4.6.2 依赖2 _3 _9 @2 c* w) V2 b
4.6.3 引用
1 p$ ?7 y3 C3 e4.7 整合多个配置文件
) ^. I0 p9 V/ [; k# |3 P4.8 Bean作用域
8 W. Z; T6 s4 n! m* E4.8.1 singleton作用域3 v0 M7 u8 W% R& I" k
4.8.2 prototype作用域
/ Y6 w7 e6 a# C' C' P- a4.8.3 Web应用环境相关的Bean作用域, B% H: c2 `* T5 I5 L' B
4.8.4 作用域依赖问题6 ] u; p( S; u. b! {' t
4.9 FactoryBean
" s* ]1 @; M0 S4.10 基于注解的配置1 E u' i4 N: }; ~2 G {
4.10.1 使用注解定义Bean
0 C0 K6 s/ W7 c% R9 e4.10.2 使用注解配置信息启动Spring容器0 P$ B! r; `$ m
4.10.3 自动装配Bean2 t" ?: j, n, _
4.10.4 Bean作用范围及生命过程方法
# n0 q- b$ `, u$ u+ P+ v4 n) ~+ ]4.11 基于Java类的配置
+ T: c6 ^2 o# P/ _5 b4.11.1 使用Java类提供Bean定义信息3 U; j- Y% ^& U) E( j0 {
4.11.2 使用基于Java类的配置信息启动Spring容器
( X8 B3 \6 { I5 W; h4.12 不同配置方式比较# V% t+ {4 j( K$ M- U# t% S+ ^
4.13 小结
O. ]3 D% k% e2 m+ T7 s9 h- |6 C# V第5章 Spring容器高级主题
6 |" U; F3 K; v' F5.1 Spring容器技术内幕) m- \$ d8 [, }& Y/ T5 o
5.1.1 内部工作机制
[9 \. `. e5 K' V: }8 b' A( g5.1.2 BeanDefinition& [& Q: M* j$ h( ]5 C4 i
5.1.3 InstantiationStrategy
7 x6 Y1 t8 @3 I1 k( ~. g* H5.1.4 BeanWrapper
* C0 r4 {) r8 z5 {5.2 属性编辑器1 D( N, i& [( D/ E, T
5.2.1 JavaBean的编辑器
; ~5 X" v7 E6 R4 A5.2.2 Spring默认属性编辑器
i0 ^ M- M" G7 `: Z3 Q4 y5.2.3 自定义属性编辑器
0 F. o, {' o+ P% U! u" V: Q% a5.3 使用外部属性文件$ t/ f+ o" B; x" W4 r
5.3.1 使用外部属性文件6 A8 }) J! e* a" Z: |% P
5.3.2 使用加密的属性文件
' _4 M4 I. f* D; R6 r( I6 \5.3.3 属性文件自身的引用
7 a5 \0 q2 M% I# f1 ^; ?: C! D' \ Q5.4 引用Bean的属性值2 `3 T1 Z/ p; M& m+ \* V- G
5.5 国际化信息
5 R5 y, j$ g5 _: v D' j5.5.1 基础知识
6 p0 R: ]5 x' F* Q+ E- z5.5.2 MessageSource, H9 w) g0 m8 h6 d
5.5.3 容器级的国际化信息资源
6 x# x: u: J1 G0 w5.6 容器事件
, e/ F, w# A: v' w$ {' k% z3 K) ^5.6.1 Spring事件类结构% l1 n" k2 E" V L5 a9 K
5.6.2 解构Spring事件体系的具体实现
, {7 P, S& M$ m2 F5.6.3 一个实例# g. F4 l* _( m! z
5.7 小结
) ]& k ]" e) D9 {' [! C第6章 Spring AOP基础
9 X$ z4 L% F1 W7 C6.1 AOP概述
; Q/ C a4 P7 m6.1.1 AOP到底是什么
# f. {8 a8 C C0 s+ |6.1.2 AOP术语
6 s0 ?$ T( O7 @6.1.3 AOP的实现者
k3 [5 d" c7 W% c! d8 R8 f6.2 基础知识4 v0 N1 E+ z- O7 a, ~9 g9 l5 u: q
6.2.1 带有横切逻辑的实例1 H& B" b# J% O2 m- D9 A% ?
6.2.2 JDK动态代理
2 H3 R6 d u. s- r f6.2.3 CGLib动态代理# C* C1 j) m R9 e1 U0 M
6.2.4 AOP联盟
- V+ [- M8 }' a# _( ]6.2.5 代理知识小结
/ z9 B4 ~, {7 |7 z6.3 创建增强类' t6 A. M" n. C: v6 F# v
6.3.1 增强类型! z6 y7 ]: W7 I. u( m/ O: m8 U
6.3.2 前置增强" ?) t f8 Z; q6 {! d
6.3.3 后置增强2 N2 B7 v9 E8 K" J& l9 b
6.3.4 环绕增强
) i7 f2 j. ?& Z( D$ F6.3.5 异常抛出增强
, q" S# S4 {4 J# s+ l4 N6.3.6 引介增强
- O) a' A# U [6.4 创建切面
) y K3 c: l! A5 c l1 P6.4.1 切点类型
( [! K$ p* [7 f3 B0 p, ]# i- Z6.4.2 切面类型
5 O/ n* ^5 U8 }4 ~. @$ g" r6.4.3 静态普通方法名匹配切面
|& E" C/ @( f0 g1 K1 C0 K: S4 y6.4.4 静态正则表达式方法匹配切面4 p9 T, M" `6 B% X- W
6.4.5 动态切面
! l( a+ m( U* @% f1 g* Z5 G6.4.6 流程切面
' s% ^+ t! H' D" g: M" D! d6.4.7 复合切点切面* J, g1 q( j2 T. y ]$ d6 z. z
6.4.8 引介切面
9 C; Q/ h' H$ t& z1 C) P6.5 自动创建代理4 l I6 x. [: |9 D8 ~5 x" i6 c
6.5.1 实现类介绍+ d1 x8 z" Z0 ]( L
6.5.2 BeanNameAutoProxyCreator
+ J `* C3 V' K2 ~6.5.3 DefaultAdvisorAutoProxyCreator
! o% k W1 L3 i" r* T6 [0 J; N6.6 小结7 G8 ]* d T8 [' i/ C
第7章 基于@AspectJ和Schema的AOP
& d- L6 Y# N7 s$ H& H7.1 Spring对AOP的支持
6 f9 f# F }( s" u- H' }. o7.2 JDK 5.0注解知识快速进阶
0 o/ I3 t2 i6 a6 z7.2.1 了解注解
# {. D7 I* @# T1 b- U- J s+ r7.2.2 一个简单的注解类
5 j9 G6 B7 E' ^. n7.2.3 使用注解% _% n; S, O% H C
7.2.4 访问注解
' G8 B3 C' H8 T6 p7.3 着手使用@AspectJ. u" c% s$ P( D1 A7 a2 l
7.3.1 使用前的准备, | E6 ?5 K g' E$ s
7.3.2 一个简单的例子
5 r% l0 K0 V1 H4 g- g8 O7.3.3 如何通过配置使用@AspectJ切面7 f: N; J1 r9 R+ ?" |3 ?5 I
7.4 @AspectJ语法基础
0 ^1 C+ I; G5 w! B6 L4 c: q7.4.1 切点表达式函数
0 j) x I/ G0 L% |; w' I$ q3 U; M2 F; p% r7.4.2 在函数入参中使用通配符. L' n% V- t' m2 `" e
7.4.3 逻辑运算符8 w6 U2 x w5 {$ z3 I
7.4.4 不同增强类型
' N1 ?6 \, k. l! D$ b4 a1 F7.4.5 引介增强用法5 u9 a( {8 I! ]8 v T
7.5 切点函数详解
) z) _/ S8 Q8 g3 W. ?! k7 m7.5.1 @annotation()6 p3 @' C! d4 G/ k9 E2 n
7.5.2 execution()
/ ~8 ?" p% l2 i1 T& b) a) M7.5.3 args()和@args()
% o$ s0 B% t z( B+ @7.5.4 within()! ~ w a% q( X; F9 j% f
7.5.5 @within()和@target() A- W' i5 d$ N* \
7.5.6 target()的this()
! ]3 P, _% ?& @' ]. ^) y3 S, d+ d7.6 @AspectJ进阶
! P5 H! i. O$ g( K7.6.1 切点复合运算
; l& I& J/ K6 e( v7.6.2 命名切点 U6 C3 o8 g) Q% ?& Q2 Y
7.6.3 增强织入的顺序
* N t! X$ G! \# t7.6.4 访问连接点信息# H% t' E+ q7 k1 u- P& m# k
7.6.5 绑定连接点方法入参
0 D# g7 f3 B7 P; R$ I7.6.6 绑定代理对象
. ]1 t& {+ b6 Q" [4 X. D7.6.7 绑定类注解对象7 `" P* T: k, R8 p7 R8 q4 T( X# L
7.6.8 绑定返回值
, l" E6 l7 _! m6 p; z- `! G7.6.9 绑定抛出的异常
! q% G1 U1 s2 Z7.7 基于Schema配置切面
% j- D# m+ t1 j+ Q! W) p6 d7.7.1 一个简单切面的配置
- U" ?$ w, z6 ^8 e! F7.7.2 配置命名切点
' G( E& p1 m& q4 W+ b& O7.7.3 各种增强类型的配置
* [) K) P8 R3 V/ `; l. M7.7.4 绑定连接点信息6 H" I0 J: w7 e7 {2 ^) j
7.7.5 Advisor配置
* `" H9 z9 u, N/ w' n) \7.8 混合切面类型
1 Q. u9 ^) Z- _# f4 l7.8.1 混合使用各种切面类型
# w' F! R5 a: L( F! _* A7.8.2 各种切面类型总结
# h0 k4 \/ y' {& n/ f9 o6 `7.9 JVM Class文件字节码转换基础知识
2 E/ ^/ ]0 F) h( \" G: A# x7.9.1 java.lang.instrument包的工作原理
& c% g; g) l/ \- Y7.9.2 如何向JVM中注册转换器1 F& _7 P' c1 i4 Z8 E ?+ g. d
7.9.3 使用JVM启动参数注册转换器的问题$ w2 @) \' ~" d8 g0 o* y& [
7.10 使用LTW织入切面
* n3 F: S q9 ], B. [; q6 G. U7.10.1 Spring的LoadTimeWeaver
& }! p7 U4 Q# O, a' Z0 X" W7.10.2 使用LTW织入一个切面
+ ~. h4 j& S, z# C, u+ |7.10.3 在Tomcat下的配置/ R$ `+ v$ B# a) S- {
7.10.4 在其他Web应用服务器下的配置, j1 ~) b, G' R4 s: i: Z% |( a& A! ~* d
7.11 小结
4 p! r7 I& N- g) Q$ z+ s' r7 F% L- ^% n& f$ z
第3篇 数据访问. a+ \/ ~- o7 H
第8章 Spring对DAO的支持1 Q% }. o1 w; A0 {! u& x5 Y
8.1 Spring的DAO理念
" I6 I! M# ]) r1 K! Y1 U9 E8.2 统一的异常体系
" k" J7 J" }& r( k9 F$ N8.2.1 Spring的DAO异常体系
3 @$ y) a; A6 u$ |4 f) i" x7 q8.2.2 JDBC的异常转换器. q3 a$ W- _0 V
8.2.3 其他持久技术的异常转换器4 \6 s3 [6 a* p4 A
8.3 统一数据访问模板5 h$ d+ d7 l' l; C% i! x
8.3.1 使用模板和回调机制
# O6 K, [/ F* w3 p/ q8.3.2 Spring为不同持久化技术所提供的模板类
! e1 { a e$ u$ p# j8.4 数据源, ?8 l7 a- X" H5 @ I
8.4.1 配置一个数据源
; ?2 R0 U% ?+ f/ {; {# r; s9 d8.4.2 获取JNDI数据源
- f7 w* e* D, c. o9 y6 o; x, T8.4.3 Spring的数据源实现类# `4 @4 j+ }4 h
8.5 小结
8 w8 X8 c5 v. u' _8 F第9章 Spring的事务管理: H$ y( P3 q9 J% f- _$ t
9.1 数据库事务基础知识
/ ~ j: o! r4 G9.1.1 何为数据库事务
3 { w: u* p) g( N' e9.1.2 数据并发的问题
# v9 r% {# _8 D! v9.1.3 数据库锁机制
, C* W5 r' c- q" R9.1.4 事务隔离级别8 T3 F. |5 ?, f( b$ z! a' ]. q9 e9 C
9.1.5 JDBC对事务支持
: M9 g q) j3 i/ q8 ?% n9.2 ThreadLocal基础知识 Y" r$ m3 z6 _. U! H* g+ Z
9.2.1 ThreadLocal是什么; |4 i* n6 b3 K
9.2.2 ThreadLocal的接口方法
5 [6 |1 g6 H% P( V8 o( A6 Y9.2.3 一个TheadLocal实例1 x% E; @/ j+ j" @; T; l+ O+ o/ x
9.2.4 与Thread同步机制的比较
/ l: T. ?' }4 L, s9.2.5 Spring使用ThreadLocal解决线程安全问题
( k0 K' v/ ]1 X9.3 Spring对事务管理的支持0 c0 E0 A% ~% d) b
9.3.1 事务管理关键抽象
$ Q0 h" e; Q7 H- S9.3.2 Spring的事务管理器实现类
3 y+ K0 W/ G$ B w3 U9.3.3 事务同步管理器
+ [- P; H) n/ Z8 r+ N+ M9.3.4 事务传播行为) {6 D5 M/ u3 u
9.4 编程式的事务管理
: K- ]% i/ w- t; y9 V: j9 D C9.5 使用XML配置声明式事务8 s3 P, N% k2 W( i
9.5.1 一个将被实施事务增强的服务接口
: j9 q" s: m6 h9 ?. X& J9.5.2 使用原始的$ o5 H6 R* x* [3 v' G6 p7 p: x
TransactionProxyFactoryBean }, w8 k( I# `& y# ^# d" H- ~
9.5.3 基于tx/aop命名空间的配置, l) V, y2 l6 H' `4 E/ c, }4 V
9.6 使用注解配置声明式事务
) Y/ w& e, {3 L# W, F% V9.6.1 使用@Transactional注解! {/ a5 {+ l6 e& [
9.6.2 通过AspectJ LTW引入事务切面
; \& {& {7 i# U* B. Q; {- m9.7 集成特定的应用服务器
1 E5 p0 l0 c7 l& }9 S9.7.1 BEA WebLogic
8 m G9 k- |+ k S& \9.7.2 BEA WebLogic
, T$ o& i% U) ^9 D# F, o$ N9 s9.8 小结- V. H( { f3 e) T& [
第10章 Spring的事务管理难点剖析
9 d9 G3 m D2 t10.1 DAO和事务管理的牵绊! f4 `, {& ]* o0 y9 L1 p
10.1.1 JDBC访问数据库4 j W! k+ ?8 Y* @8 H6 `
10.1.2 hibernate访问数据库
* K7 o+ H1 E2 I) N10.2 应用分层的迷惑. d) x) E% [- C- S& t! Z
10.3 事务方法嵌套调用的迷茫 f2 f9 T: c% g9 J$ Y9 U
10.3.1 Spring事务传播机制回顾
6 Y- G. \+ x& V! `10.3.2 相互嵌套的服务方法! w5 e" a3 F. F/ D% i7 y, x
10.4 多线程的困惑
: v B& P& |' n F; U+ s3 o9 w10.4.1 Spring通过单实例化Bean简化多线程问题7 f/ d# y# ~) [
10.4.2 启动独立线程调用事务方法1 k% s6 F, T" K8 \. d% n- j B S
10.5 联合军种作战的混乱7 r: a: ]9 r( u) Z
10.5.1 Spring事务管理器的应对
J$ Y4 U7 J- h/ t2 p) I+ Y1 }10.5.2 Hibernate+Spring JDBC混合框架的事务管理+ q0 t' d* W6 F
10.6 特殊方法成漏网之鱼1 ?4 E% M7 q- `
10.6.1 哪些方法不能实施Spring AOP事务
6 v! \+ Y1 A$ a. f2 l! C" N10.6.2 事务增强遗漏实例 n) p* \1 }( p, `! h8 t
10.7 数据连接泄漏" ]5 q; M! C- S- f* I- I- Z. K
10.7.1 底层连接资源的访问问题
6 A7 P3 @" k$ e1 J7 H7 t10.7.2 Spring JDBC数据连接泄漏; Y k2 @5 @0 c& c9 e
10.7.3 通过DataSourceUtils获取数据连接% g; c w, l' B
10.7.4 通过DataSourceUtils获取数据连接/ V9 t2 G0 ?3 }6 d8 f: U# g% V
10.7.5 JdbcTemplate如何做到对连接泄漏的免疫
3 K# F/ O$ i/ o) p$ g10.7.6 使用TransactionAwareDataSourceProxy, W( T/ U) y) Q( S: [6 _
10.7.7 其他数据访问技术的等价类% Q+ }9 J3 N, t& }: Z+ _* I4 X0 @
10.8 小结
& n/ g6 y9 q: ^* [7 \第11章 使用Spring JDBC访问数据库
5 B" I. B3 L4 U5 s3 z' u9 U11.1 使用Spring JDBC
. d7 [' ~! r- Z11.1.1 JDBCTemplate小试牛刀' _, V# s8 {. `/ B' q7 Q
11.1.2 在DAO中使用JDBCTemplate
) E) q/ }/ n4 i: V! g11.2 基本的数据操作 v" e8 W0 q/ _5 F3 E9 s
11.2.1 更改数据4 V5 W8 g* ?$ H# }3 c) c
11.2.2 返回数据库的表自增主键值
: a: I8 F$ |, h11.2.3 批量更改数据
# J; F0 D% w( j. m1 m11.2.4 查询数据
3 Q+ O- N6 h' {3 f4 |11.2.5 查询单值数据
: R3 P4 v$ Z, L3 c5 D& i$ }, _/ t( {11.2.6 调用存储过程- k2 a: P1 ?# i+ h
11.3 BLOB/CLOB类型数据的操作7 d# g0 F. }6 ^- X( Q2 D. c
11.3.1 如何获取本地数据连接
7 D# _ v; J0 Y0 @! }: u11.3.2 相关的操作接口! Z. N% v# K! D* P
11.3.3 插入Lob类型的数据
, Q$ B& O3 O2 d5 U1 b* o11.3.4 以块数据方式读取Lob数据
X2 W' s- n2 I! `8 v+ V11.3.5 以流数据方式读取Lob数据
4 H9 Y5 m5 [ T11.4 自增键和行集3 q+ J- j$ h" ]$ J
11.4.1 自增键的使用
3 I/ ^$ Z5 B; e w) t$ q* }6 `11.4.2 如何规划主键方案
/ j* ]2 r4 ]3 A- ~! D& K7 T11.4.3 以行集返回数据) S: I h q/ y& b, O# e! d z l5 T
11.5 其他类型的JDBCTemplate
7 K3 {3 I$ n8 {+ y11.5.1 NamedParameterJDBCTemplate; ^* u- P3 ~1 f8 J
11.5.2 SimpleJDBCTemplate( s: w0 K# R9 g. a
11.6 以OO方式访问数据库0 M8 C# _" J, G* z% q9 P4 r
11.6.1 使用MappingSqlQuery查询数据
' n2 K. o4 z# S5 _11.6.2 使用SqlUpdate更新数据& w q( G, t! o
11.6.3 使用StoredProcedure执行存储过程0 y* G' O& z) a' B0 g+ F' b s& }
11.6.4 SqlFunction类6 w0 f' J$ P3 A/ f8 u" p3 n
11.7 小结
! k2 R; ^0 M, ] b @( |第12章 整合其他ORM框架
5 t6 ?, x" ]7 I @12.1 Spring整合ORM技术6 \- ?$ ?+ ~1 Q$ d% p( K1 n, V
12.2 在Spring中使用Hibernate8 A; t' P- s7 ]! w5 f
12.2.1 配置SessionFactory
3 r9 C1 c" l) S0 K. b12.2.2 使用HibernateTemplate
* J3 n$ K* O) s) N& s5 d0 Y$ p) }12.2.3 处理LOB类型数据& v8 G! o" U- { N- n
12.2.4 添加Hibernate事件监听器: {: h5 t9 q+ B- K; y4 l! L6 s
12.2.5 使用原生Hibernate API
8 j: ~% C; \/ w* N( S12.2.6 使用注解配置
; d+ J! C+ ?" L! Z W12.2.7 事务处理7 G! o% {# u. s
12.2.8 延迟加载的问题# Y n& p0 G' ?
12.3 在Spring中使用myBatis1 H' {7 B: x. }; C
12.3.1 配置SqlMapClient3 \! k+ d1 y- g# J
12.3.2 在Spring配置myBatis6 y; {( V/ m/ i/ r4 _% G3 {( D
12.3.3 编写myBatis的DAO
0 @& p4 c) d# R# z9 h$ N* ~12.5 DAO层设计3 I2 t7 w/ c% w( N$ o/ z
12.5.1 DAO基类的设计# A2 ], R- H9 [/ x, j# h" C
12.5.2 查询接口方法的设计: E2 i! O/ s/ m5 ?
12.5.3 分页查询接口设计
; T0 _* q. K3 k/ H) Z v; {12.6 小结" W' l) ?$ P/ X
' y! a$ j, ~/ S
第4篇 业务层及Web层技术8 n3 F( Z8 J; q' D
第13章 任务调度和异步执行器
: S$ u5 W7 I, F13.1 任务调度概述
$ o7 Q3 K( O6 W$ k0 u13.2 Quartz快速进阶) \4 X, a$ ^( s8 H
13.2.1 Quartz基础结构
4 k& R/ Z; b% J' ?& e$ y0 K. d5 z- ]3 R13.2.2 使用SimpleTrigger$ q* X% X7 @5 L* n( A6 t
13.2.3 使用CronTrigger
9 J3 S% E Z) E. o+ i7 h13.2.4 使用Calendar
$ i( M, Q( ~! _9 |9 _6 u+ G" R13.2.5 任务调度信息存储1 J( W" n% U) r$ ^+ A; { a
13.3 在Spring中使用Quartz# }1 u1 k6 m7 K2 w; J( I: I1 t
13.3.1 创建JobDetail
7 r9 B$ u W% z, o/ a9 c0 S13.3.2 创建Trigger' @# T0 o1 G1 Z* T
13.3.3 创建Scheduler
+ F* M5 N1 s) \3 U" k* m4 i13.4 Spring中使用JDK Timer
, O- @) w {9 b+ g; H13.4.1 Timer和TimerTask
8 ]4 b) N h0 {& W2 I' @" L+ V13.4.2 Spring对JDK Timer的支持
$ k5 P* @' h( n2 H7 f* n, g" {13.5 Spring对JDK 5.0 Executor的支持
: g4 s$ _- w/ O8 {- f13.5.1 了解JDK 5.0的Executor. i2 H7 J9 ` p+ d5 P, T1 J/ W
13.5.2 Spring对Executor所提供的抽象 }; w* j9 r, a8 W, U6 ^, l
13.6 实际应用中的任务调度
1 U. k7 y! \7 m13.6.1 如何产生任务
5 I1 k6 C& ^7 C2 p13.6.2 任务调度对应用程序集群的影响
7 U9 k, |! v. {- n+ G7 D0 E13.6.3 任务调度云+ x/ i5 Z/ q' J6 d& w# m
13.6.4 Web应用程序中调度器的启动和关闭问题9 C- x- D6 f4 c8 A
13.7 小结
; `3 u; ]0 @8 e; S" ~% _第14章 使用OXM进行对象XML映射7 R; `' H- `) o
14.1 认识XML解析技术
% y0 D2 H# Z" a# k0 P0 `5 x14.1.1 什么是XML5 R' X" w' D2 C9 P% T
14.1.2 XML的处理技术) p' s5 b' o: l
14.2 XML处理利器:XStream
& w( v$ T# W+ X- v14.2.1 XStream概述- z4 L: x* K" Q% y) H7 x$ Y6 S+ y5 ^
14.2.2 快速入门5 n! S4 E8 a/ u2 V" {( K' h
14.2.3 使用XStream别名
. E' |# X, g# I1 b14.2.4 XStream转换器5 v# C) w) U; X# c6 r
14.2.5 XStream注解
% t/ D% g" u0 B% y# w+ F; O14.2.6 流化对象
+ O& z6 u( S0 ~! \2 ]/ h. K, d14.2.7 持久化API
3 Q; x3 i5 d, P4 w14.2.8 额外功能:处理JSON- @% p' r: e3 V, h) }* v7 p
14.3 其他常见O/X Mapping开源项目. |. M4 S" ]- F
14.3.1 JAXB
# {- N6 H2 w8 P+ l( R14.3.2 XMLBeans! g, @ [# `" ?& V h& z; n
14.3.3 Castor0 d4 i& t0 C0 q: u2 m9 m
14.3.4 JiBX
& }+ x$ u& J( B1 k2 G14.3.5 总结比较8 L2 M+ }% F- q3 u8 W; r, P
14.4 与Spring OXM整合
$ e/ U, P# O5 [; @8 o14.4.1 Spring OXM概述# |( o( S- J9 U4 t+ M
14.4.2 整合OXM实现者
, X- Y4 X! j8 `9 q, |4 G14.4.3 如何在Spring中进行配置
0 q5 z8 d( K; y0 C; T" p14.4.4 Spring OXM 简单实例$ w9 Z5 I! _" v; j0 L
14.5 小结7 ^) Q! @) g8 W5 F8 _ t- ~6 G
第15章 Spring MVC0 k4 D0 ^" T7 G
15.1 Spring MVC概述- x. C0 m B' @3 ^- h
15.1.1 体系结构) ~0 H8 c3 |4 m* m2 i$ |; C
15.1.2 配置DispatcherServlet
3 G( ]0 Y( \* x) h15.1.3 一个简单的实例$ \6 @* C( F" Q6 o! l1 ^) R# r
15.2 注解驱动的控制器
& i" S# ]5 Q2 ]8 f/ S) q- _0 R15.2.1 使用@RequestMapping映射请求
$ Z& `1 V, u1 J, D) i/ I8 I2 ?15.2.2 请求处理方法签名概述
( `, y( O, i1 T% v# f15.2.3 处理方法签名详细说明
; z! S+ E: {3 U) ^! ?7 s& a15.2.4 使用HttpMessageConverter<T>
5 B4 S& W+ z4 n5 m: f8 e15.2.5 处理模型数据
. s2 f4 o( x7 {4 s* g1 I5 ?15.3 处理方法的数据绑定
1 b$ B- |: f2 a1 h! y9 F15.3.1 数据绑定流程剖析2 ]+ d0 `6 F/ u) F' V( w5 K" ]
15.3.2 数据转换
" v( S8 b9 ~6 r1 m6 U15.3.3 数据格式化' C# T9 T" y) M9 P. G4 M
15.3.4 数据校验
4 D! N- m$ @) L4 B8 f15.4 视图和视图解析器
" U3 H. p8 a" R8 _- n15.4.1 认识视图: z& s5 H. y) e5 u* ~: O4 {; ^4 f
15.4.2 认识视图解析器# d# [4 U5 ~! [, t0 u4 g
15.4.3 JSP和JSTL
; `( G/ t9 s1 O4 r15.4.4 模板视图8 ~8 \5 m5 q2 [0 { B7 [. m
15.4.5 Excel+ {! e" Z* t" I$ E! I
15.4.6 PDF4 e6 P* p4 |# {
15.4.7 输出XML
9 m% `1 c0 z9 `9 U15.4.8 输出JSON
9 O% S ]8 u3 j; [ x15.4.9 使用XmlViewResolver/ g1 O8 D) j+ S$ Q4 H J
15.4.10 使用ResourceBundle ViewResolver
! _" [3 C0 a5 L% c% b15.4.11 混合使用多种视图技术; p A8 Z. [" G g2 ?
15.5 本地化解析# }% g f' E m, G- w; z# n) U! P
15.5.1 本地化概述- \4 Q7 ~& ?, V- G+ ~
15.5.2 使用CookieLocaleResolver3 _ n A, j! H. x: t
15.5.3 使用SessionLocaleResolver
1 u1 |4 C8 I! [- U15.5.4 使用LocaleChangeInterceptor* k! A# D! ?' r, @
15.6 文件上传
$ p- @* q2 X: [* L. _15.6.1 配置MultipartResolver
* }( n, X5 E- C3 `1 h" }+ d15.6.2 编写控制器和文件上传表单页面
- F+ [# h4 F$ I) d4 S F) x15.7 杂项
3 S* C R, l* O& @% Y; X15.7.1 静态资源处理
4 \. U7 ~# H9 q# K15.7.2 装配拦截器
( \: ]! ]1 V0 ]+ S, t. f3 p15.7.3 异常处理
' K: `3 g$ F y6 X$ k15.8 小结
3 r( n, ]- ^) V$ V' b9 g) P- z2 J; ]8 l1 I7 J8 O
第5篇 测试及实战- J- [8 _& v8 @
第16章 实战型单元测试/ H: b/ l& H8 V" |* m& J
16.1 单元测试概述
% J: A* B5 Q: z6 D0 n* T16.1.1 为什么需要单元测试
+ o- |2 O( e/ n16.1.2 单元测试之误解
2 M) S9 v B4 \& a( Z T- F+ \16.1.3 单元测试之困境
/ B9 L' _' C- _9 x! U& Q' V5 ?16.1.4 单元测试基本概念8 D" C8 C* e% [) x
16.2 JUnit 4快速进阶
( B! Z) s# P# `& N B" Y) x16.2.1 JUnit 4概述
6 K, b: j/ U" }) Y: A, H16.2.2 JUnit 4生命周期5 |& n6 s p; @
16.2.3 使用JUnit
' L0 z8 _, Z% ]- `16.3 模拟利器Mockito- o$ o( N2 r: ? h0 |
16.3.1 模拟测试概述
3 y& x8 n2 b( K16.3.2 创建Mock对象
* P# H3 V, o- A& l16.3.3 设定Mock对象的期望行为及返回值0 Y1 T9 F( g* C6 u5 j% Q( ?
16.3.4 验证交互行为* E( \7 E- i: t1 K" Y
16.4 测试整合之王Unitils
( T: W# e- O0 N* f% K16.4.1 Unitils概述
, I; _+ p) m& a16.4.2 集成Spring1 }1 ^8 s) y! T4 K$ F
16.4.3 集成Hibernate2 {0 O) [$ }6 n4 ?) v: q
16.4.4 集成Dbunit
: e5 ?. K2 ?. x, m: `; r* B16.4.5 自定义扩展模块
6 h& b& k- B5 P. I16.5 使用Unitils测试DAO层
6 H; O! K0 b0 E; f+ }$ Q16.5.1 数据库测试的难点
4 Z& x6 q. S3 x/ w$ V' C16.5.2 扩展Dbunit用Excel准备数据
6 U7 L1 s* [5 K8 k16.5.3 测试实战9 O l. A) w. ~: H9 i7 g
16.6 使用unitils测试Service层9 R0 F, }1 }( S6 }
16.7 测试Web层9 j0 G0 U. Y6 h) }; D
16.7.1 对LoginController进行单元测试$ J; v8 y4 a3 U: P- L
16.7.2 使用Spring Servlet API模拟对象
( M5 Z5 l0 U5 ]" c16.7.3 使用Spring RestTemplate测试
: O$ j& f" c5 P& Y2 g) B, a- R16.7.4 使用Selenium测试* \% Y2 F0 W/ v* R
16.8 小结
# V6 M( K6 Q8 S/ |+ L* n第17章 实战案例开发- `; h; g% o2 u: [1 f9 ^4 I. B; R
17.1 论坛案例概述
4 V* t6 A# ?/ t! h% R; Q* y* E17.1.1 论坛整体功能结构! I; k, Z: V! m# R3 Z
17.1.2 论坛用例描述/ @) h2 h0 p' u7 U8 ?7 N
17.1.3 主要功能流程描述; c4 P) c% [) t4 u5 G
17.2 系统设计
8 h a- h5 O; j% `: Z, G17.2.1 技术框架选择
! M8 a0 |- n2 r% J/ l7 m# P17.2.2 Web目录结构及类包结构规划
% q: |: ]8 H- p+ `! d5 \17.2.3 单元测试类包结构规划
" S6 ?2 [4 t1 [2 s$ y17.2.4 系统的结构图1 {: c" d) O- f' C/ y
17.2.5 PO的类设计
1 A& q- y& o* S* o) x17.2.6 持久层设计
, M' u% a5 F1 y6 \1 d* C& c& p17.2.7 服务层设计
$ s' Q9 @8 _. _* y17.2.8 Web层设计/ \& N, h' T; k. e
17.2.9 数据库设计! {# ^9 Z+ B1 Q+ i
17.3 开发前的准备7 q5 ]. X5 N/ Y; f
17.4 持久层开发
/ V* |6 z4 }: h6 J2 ]8 q2 G17.4.1 PO类* M5 u) D9 ?6 J5 ?% Y4 y/ D
17.4.2 DAO基类
' V' R+ j( N! Q% F17.4.3 通过扩展基类所定义DAO类* n* L" P- v$ ^
17.4.4 DAO Bean的装配
( s$ k$ H' O: K$ |! s7 V17.4.5 使用Hibernate二级缓存; z, r+ M8 D# h6 t) n. A) `2 H5 U
17.5 对持久层进行测试
# B6 T Q. C* C+ D- _1 A4 Z% W8 N. g17.5.1 配置Unitils测试环境
. M$ M3 k' F* B1 e0 w( D& F' q7 m& z17.5.2 准备测试数据库及测试数据
, q" x1 k( n) y6 e17.5.3 编写DAO测试基类4 a* @% Q+ b# e! d& }" l; g; f
17.5.4 编写BoardDao测试用例
# a" u. m" |& b2 Y0 G2 s: h1 p17.6 服务层开发" N& Q$ M d+ ~; Y1 w! G
17.6.1 UserService的开发/ U9 g' s9 W+ @+ O0 e7 q
17.6.2 ForumService的开发0 L. i' M: c1 S# L0 @- `- g6 h7 H
17.6.3 服务类Bean的装配
% S8 Q8 i" `; |8 F6 W17.7 对服务层进行测试
; _1 w5 V9 m# h, b+ w3 C17.7.1 编写Service测试基类
1 d1 @6 d: A" O* G6 S3 d; Y17.7.2 编写ForumService测试用例
# |5 c+ p; q3 ^# w+ f1 O& M, E17.8 Web层开发
) N% h) p9 |9 N' _3 C% U5 K7 H17.8.1 BaseController的基类9 X# [& S% o- ]. G- a
17.8.2 用户登录和注销
) o" E$ ]# g9 Y4 A1 C' ^17.8.3 用户注册
1 P- V* Y2 [ o7 g$ y17.8.4 论坛管理! S8 y% y5 z/ X) k$ W. ]: w' P
17.8.5 论坛普通功能
- F5 |, R! \8 F1 D! u9 D17.8.6 分页显示论坛版块的主题帖子" Q7 E* X. S2 F. a5 @! J
17.8.7 web.xml配置7 R1 F( a' D0 g, R& O G/ W. g
17.8.8 Spring MVC配置6 z8 H6 Y1 J5 Q G4 j
17.9 对Web层进行测试, k6 V5 G/ g/ C& s6 u
17.9.1 编写Web测试基类
' w( P$ I! [% W0 e, L17.9.2 编写ForumManageController测试用例
" x2 k7 S( E. }6 k" t. T' S17.10 部署和运行应用. u& S5 u4 W e8 d
17.11 小结
* k. L: D. `+ K6 l, u$ I以下内容详见本书配书光盘:8 I7 v: H7 E7 d5 h, G8 \( z d
附录A JavaMail发送邮件
/ ^' O/ g. k/ W8 T附录B 在Spring中开发Web Service2 [+ S# v: y3 \$ J1 H. L& U7 B. n" Q
$ l; O- q9 [5 ]$ CSpring 3.x企业应用开发实战(高清版)
, s: B' |3 l; T" K" u+ @- z3 A) o! V0 h+ \
+ k0 C% a% H6 d
|
|