该用户从未签到
|
揭示内幕、深入浅出6 m( Z& G2 s% L2 d( q1 M
同步更新、与时俱进/ @* E2 V `! X6 O( B4 y# `. } C
突出重点,淡化边缘
# p" _1 z# v& `/ @* r; Y5 ~理论透彻、面向实践
0 [- v" g9 w7 i% ~. e/ O3 Z/ P5 ?代码简洁、图例丰富
1 `" ~2 Z6 i& }; {1 l* Q7 l$ b! O注重趣味、轻松阅读9 H" g6 H" s) W4 z5 y
相关知识、一网打尽
6 s4 a+ A# u& z, i. F历时一载、倾力打造- _5 P+ ?5 H$ D% T( v2 g7 y
=================* n1 {% |. |6 U0 X4 ]+ M& L
spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为java领域第一开源平台的翘楚地位。, ?% D% b4 d6 U. g) D
Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升应用开发的优雅性。
( o9 K# Y# R' [! w+ ] 《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。此外,本书重点突出了“实战性”的主题,力求使全书“从实际项目中来,到实际项目中去”。
; C2 F" ? t' o# G===========================================================================================
4 L6 X4 ^# z% Y9 x) v第1篇 概述
+ g% Y9 _, l ?9 K% m第1章 Spring概述
6 @ w! |- ^! y$ d$ d1.1 认识Spring9 V, Y2 O3 x. }/ O; @, O
1.2 关于SpringSource
6 h- `9 `' d7 a& Y9 b. V+ ]1.3 Spring带给我们什么# d$ I* G1 n6 k, @$ v3 c. j
1.4 Spring体系结构9 H* Z+ U- q0 b5 B; n) ?( M
1.5 Spring 3.0的新功能" l# p# Q# g% l/ d+ E8 J9 t B
1.5.1 核心API更新到Java 5.4 X f* w8 j& |. {; p' H% F4 P9 G
1.5.2 Spring表达式语言
0 o$ v' F2 Q) O3 I+ \9 x/ f1.5.3 可通过Java类提供IoC配置信息, Z- [) l! I6 Z9 D! x
1.5.4 通用类型转换系统和属性格式化系统
& o0 P& z5 Q) P+ h# @1.5.5 数据访问层新增OXM功能0 F! Z( ?6 h% \$ t3 D K x. t
1.5.6 Web层的增强$ C0 M8 d8 s( J; P1 }
1.5.7 其他* k |9 r& k" R+ ^; d
1.6 Spring对Java版本的要求
- t. E3 {: Y/ Q2 k1.7 如何获取Spring% @, G$ S& e% e- `1 M' z, a1 Y
1.8 小结* V: ]% o- \, M1 L, E/ X( I
第2章 快速入门
3 B3 u- z' n$ t0 ?2 m2 g* l$ t2.1 实例功能概述0 x+ i: w+ n# S
2.1.1 比Hello World更适用的实例# u0 z+ v$ a0 M8 H" e
2.1.2 实例功能简介# w9 q# z4 t, n* Z. L9 N: z- l
2.2 环境准备" N# i3 A9 E: K( ?& Q. h
2.2.1 创建库表9 U0 l8 g2 a8 G$ L
2.2.2 建立工程
% A9 w/ I1 I* u8 p" \, S- d2.2.3 类包及Spring配置文件规划
# Q: R" ]9 q$ S: r) R! g2.3 持久层
7 ^) H% M+ x, x4 M2.3.1 建立领域对象/ D8 v" v% W% b
2.3.2 UserDao
0 G6 P6 M& z' T* p2.3.3 LoginLogDao) T# W2 e \& G# t# j
2.3.4 在Spring中装配DAO* S* C/ _5 b: z* T: r
2.4 业务层' k3 W( `. X. i. G4 Z
2.4.1 UserService6 I/ z( }$ t c5 K) A7 ]9 L
2.4.2 在Spring中装配Service0 I3 v* G! b; m- Q% M
2.4.3 单元测试3 b, J8 A' Z |1 o
2.5 展现层
, d7 w4 b* J8 j2.5.1 配置Spring MVC框架
4 r! E. H8 }6 y# |. y3 K2.5.2 处理登录请求
+ O0 E6 W1 h% E+ O% {: z1 L2.5.3 JSP视图页面
& B$ Q9 H4 I+ m& i! c7 \+ h2.6 运行Web应用
% P. `1 |% Q$ c& H' j" G. W2.7 小结
3 R* V% ^1 A' } b6 v1 }0 F2 Y
4 \5 @, w3 r2 G9 T第2篇 IoC和AOP6 c& w9 ~6 _. w' X K$ k3 K/ l
第3章 IoC容器概述0 H5 c o; m: I/ a
3.1 IoC概述
, V0 ~3 u3 ?; U/ p3.1.1 通过实例理解IoC的概念
$ X& Q4 u# f5 ?; g3.1.2 IoC的类型# Z; m$ D. \, ]: u2 }! S# m
3.1.3 通过容器完成依赖关系的注入% V% [8 _( m ]9 H
3.2 相关Java基础知识 R( A8 ]6 k" v1 p# b; t
3.2.1 简单实例
3 H: ]- k/ O. j+ F4 W3.2.2 类装载器ClassLoader- c. p: i& E/ y
3.2.3 Java反射机制5 m1 L. e0 e# j2 Y( ^" j6 Q
3.3 资源访问利器- F9 @9 b9 L! F2 p% z
3.3.1 资源抽象接口
/ m! B1 Q/ F0 B0 C; T0 Z0 M3.3.2 资源加载
4 }. P! m: ^4 X9 g4 m$ r9 _3.4 BeanFactory和ApplicationContext5 ^0 h F. ]. E) G+ r
3.4.1 BeanFactory介绍
R( w+ M' G/ [* X' |: z5 @6 V3.4.2 ApplicationContext介绍
& L0 O/ w! I- B5 X$ `; i3.4.3 父子容器
8 q7 ~" _+ q% Z! x. |3.5 Bean的生命周期
0 A+ d" `; L. B4 i5 c' p3.5.1 BeanFactory中Bean的生命周期 f1 ? ~& P% S7 Q
3.5.2 ApplicationContext中Bean的生命周期6 O; m' N' X G( Y a' q& e& ]
3.6 小结
$ h" |- b0 Q6 I9 W7 p" D8 Q* q m第4章 在IoC容器中装配Bean* f! X# I. \" Y# d4 g7 k
4.1 Spring配置概述
) {. y2 J0 j7 C4.1.1 Spring容器高层视图3 Q. G+ j% ^+ ]- L
4.1.2 基于XML的配置, Z; y4 S% R0 r2 w! F7 N* T
4.2 Bean基本配置
( e) |: s, }# y m. n6 A6 i+ g5 ]4.2.1 装配一个Bean
" j1 J. l4 R% E7 v/ _# a4.2.2 Bean的命名
7 M0 F3 r) {& y$ N4.3 依赖注入2 y$ H9 K7 B. l; u. ^$ b
4.3.1 属性注入
% G+ F/ f- d0 b0 K9 W4.3.2 构造函数注入
- ~: E" u. \8 d- U# u# n& T. r4.3.3 工厂方法注入; e) o! u, a! E. G
4.3.4 选择注入方式的考量
- a9 I, z7 Y5 j0 Y; R0 f3 a4.4 注入参数详解) X- x; I+ g. v5 ?% i; h* B
4.4.1 字面值
" y. ]2 [1 |' t1 r% I2 N) b4.4.2 引用其他Bean6 ?; G* v c# c. a. M% Q+ P
4.4.3 内部Bean2 r1 \* q5 `4 E: W4 k! s
4.4.4 null值! g, r7 ^6 `9 q7 I- k6 c
4.4.5 级联属性8 \# i. d2 [( Q
4.4.6 集合类型属性1 m6 d" O$ ^* q& e
4.4.7 简化配置方式
3 _( I3 u2 L' x2 q4 n- K( u J- c% m4.4.8 自动装配
6 Z2 J* b8 F0 I) E, L4.5 方法注入
) o) H. ^6 T b$ g4.5.1 lookup方法注入4 w" a" T# ]0 g
4.5.2 方法替换
: E% o, R6 l1 h5 Q) I, T4.6 <bean>之间的关系
4 C3 N! @5 Q+ M: Z: s7 f/ D4.6.1 继承
2 S' s& z5 K' c4 U! N6 V. n3 e- c4.6.2 依赖
1 F) s0 q; l. ?( d4.6.3 引用! f6 Q- ?) N! u! E2 R+ j
4.7 整合多个配置文件: ]# T% `0 w" q4 @; g; v! L
4.8 Bean作用域; T. E9 G O. [
4.8.1 singleton作用域# w* q8 B' n+ M
4.8.2 prototype作用域% i6 t- j2 H/ z5 ]( |
4.8.3 Web应用环境相关的Bean作用域: ?5 n9 o1 m9 |: V' v R
4.8.4 作用域依赖问题
7 y# p! ~) \) y( ^5 c% _( {& @( a4.9 FactoryBean+ X+ j O* a, \
4.10 基于注解的配置* d' b. Z" m3 Q* T# a3 K$ a
4.10.1 使用注解定义Bean
/ y _6 A+ G" i4.10.2 使用注解配置信息启动Spring容器
, K8 u. d" V6 b( a/ i4.10.3 自动装配Bean; c- f/ p! r5 Z/ Q$ Q: S
4.10.4 Bean作用范围及生命过程方法
# L/ {& ^& G# p* x: n4.11 基于Java类的配置
5 [4 A& C1 s) a4.11.1 使用Java类提供Bean定义信息5 b) `9 D: @5 A5 ]" N, _
4.11.2 使用基于Java类的配置信息启动Spring容器
4 U3 I' C) n/ n1 [ a- S( T- t4.12 不同配置方式比较
- ]0 H$ y5 q1 C+ Y z3 [ q7 b! ?) W& \9 ~4.13 小结
) I( |% |3 R7 }, ?6 O第5章 Spring容器高级主题9 q0 A$ T2 q* Y/ n w' j8 e; K E+ r
5.1 Spring容器技术内幕
) h* T2 O" {# d' L5.1.1 内部工作机制6 q+ h' b R$ `
5.1.2 BeanDefinition( Z* a$ k. T, a2 O$ x
5.1.3 InstantiationStrategy8 q) l% q; @% Y, u
5.1.4 BeanWrapper8 m8 y' Y! y j- N/ q
5.2 属性编辑器
/ f4 m) c$ B% u$ @+ w+ Y# e3 V5 H5.2.1 JavaBean的编辑器
: O$ t0 J v2 _, |5.2.2 Spring默认属性编辑器
6 ~, l, }* |. X% ^5.2.3 自定义属性编辑器
( F4 i% ?7 @/ x" k3 ]7 g! w2 G- d- C5.3 使用外部属性文件7 S/ h! A5 X. Y" X% A0 T- B
5.3.1 使用外部属性文件9 n5 y, z: ^8 H( F- i3 i
5.3.2 使用加密的属性文件/ |& o1 P! e' I+ n/ v5 U" n
5.3.3 属性文件自身的引用5 U1 p; ^# [" Y# {
5.4 引用Bean的属性值
9 \5 Y7 q6 v5 }5 W" p9 U$ G) Z5.5 国际化信息6 M& L& W7 U* M2 i
5.5.1 基础知识0 F7 R% T$ h+ M |: L' t
5.5.2 MessageSource* Q; p5 |# j6 Q( c
5.5.3 容器级的国际化信息资源, u' u: b' L5 E' F
5.6 容器事件
. ?3 Q' V' {7 O; n; T1 [' c& w9 m5.6.1 Spring事件类结构- Y; Q* {) N( ~& V* j/ p: u1 W
5.6.2 解构Spring事件体系的具体实现
3 k2 a3 B) ^, I5.6.3 一个实例
6 `. Z* U# R+ M% R5.7 小结; A: Q( q6 Y1 w1 J7 N
第6章 Spring AOP基础. z! y( ]( T2 c7 i) V$ o: V
6.1 AOP概述: {- ?0 H6 D3 Q2 y
6.1.1 AOP到底是什么/ d: \0 b5 A& O, {, c8 S. i0 J& x
6.1.2 AOP术语6 J/ F- b6 L+ o) Y1 Y
6.1.3 AOP的实现者% J& E3 P1 z7 \7 g' R/ F
6.2 基础知识6 ?( T% ~" x* Q8 z) q8 J; j
6.2.1 带有横切逻辑的实例' k" d: \4 I- P( G% F z, e7 F1 w& i
6.2.2 JDK动态代理4 ?7 v9 W6 B. ]6 a2 N& C
6.2.3 CGLib动态代理
: J# {: D3 R- @! A4 e3 l' e5 Y& b% W- u6.2.4 AOP联盟
/ K! c# A7 ~! B7 ?; X" f6.2.5 代理知识小结
7 W6 [& Y z" U$ k6.3 创建增强类
8 h% y$ r- w+ S8 J( C- j' L6.3.1 增强类型
: p3 Z0 c1 H% m& ~/ C( o6.3.2 前置增强- _' A) ?4 C+ ~
6.3.3 后置增强
* F" T7 c! n: {8 F/ K6.3.4 环绕增强
% I7 z. m$ C" n! @0 L0 x6.3.5 异常抛出增强4 @4 L+ k3 U* R6 N: d8 e
6.3.6 引介增强
" U) X: m4 `' g9 S7 n9 U6.4 创建切面' b+ X. J6 o' ?+ u, e9 d. @
6.4.1 切点类型* @: Q" M0 A6 p) I5 G3 A7 C" p+ b0 D
6.4.2 切面类型
7 Z! L8 H: k; l8 Q3 f% \3 [6.4.3 静态普通方法名匹配切面
+ _3 U5 s5 _# }, k6 A+ _6.4.4 静态正则表达式方法匹配切面
1 Z$ k g; Q" c6.4.5 动态切面+ u: T' Z5 G' y0 l) `' s6 l
6.4.6 流程切面' W7 y$ e/ c6 r1 y
6.4.7 复合切点切面
: ^% G& _! K( `' {6.4.8 引介切面
) {% c( W: M5 [ o1 K* i" S% H6.5 自动创建代理
: m3 P, R9 T( w6 @: D: k6.5.1 实现类介绍1 z- l* r+ d8 s
6.5.2 BeanNameAutoProxyCreator. ?( O1 U1 l) w' S: w% g* U6 H+ i2 o
6.5.3 DefaultAdvisorAutoProxyCreator
9 _3 V6 M6 s, i$ E X# n) O6.6 小结- t' R, i4 y2 T2 S* \5 I, _" C
第7章 基于@AspectJ和Schema的AOP
2 P1 J, I" s: H+ H" h) q5 Y7.1 Spring对AOP的支持
( {0 w$ a, C& N; @' J6 F. ^7.2 JDK 5.0注解知识快速进阶$ y X7 y( ?) m. q, L4 v8 }
7.2.1 了解注解
; \# f B" H2 [+ y8 M' _+ H2 v7.2.2 一个简单的注解类
5 C5 J3 N3 b0 m0 T: a$ u3 `7.2.3 使用注解! l: t1 i% B5 w
7.2.4 访问注解
2 G, E8 t6 g, _" O7.3 着手使用@AspectJ `, B! a, M; E$ d$ b+ U
7.3.1 使用前的准备
" {% e. U3 S. e7 ^4 [7.3.2 一个简单的例子
- z) \: s i! W$ p0 t0 i7.3.3 如何通过配置使用@AspectJ切面
8 e8 Q7 s9 T" G; @7.4 @AspectJ语法基础/ C: O( z; p; R6 H
7.4.1 切点表达式函数
# x5 H% K* i. G4 L7.4.2 在函数入参中使用通配符
! n' @. q6 `1 c2 \ o. y- y$ Z7.4.3 逻辑运算符9 e/ q! x. X9 M$ Q: T
7.4.4 不同增强类型3 P) M5 r4 ^: }) \8 U
7.4.5 引介增强用法9 W! x2 r |' d; c6 n; `
7.5 切点函数详解
4 ^( B W1 J% j0 z7.5.1 @annotation()3 p/ o/ [! p1 S# h4 b
7.5.2 execution()
r3 L2 X/ l/ e: j; R. z7.5.3 args()和@args()
X" u' x. ?& v, @8 R7.5.4 within()
, q. T2 {; q( H/ e% ]7 H- v6 @7.5.5 @within()和@target()
' m( T8 E: u* h. L4 c! r2 \7.5.6 target()的this()& b) V' q5 ]7 u; t8 M
7.6 @AspectJ进阶: ^" V7 \! `& m- ?7 r" N {2 b
7.6.1 切点复合运算
6 t# u4 s- J) s, m7.6.2 命名切点7 X0 o2 s2 F; M" p% J* T8 L* K
7.6.3 增强织入的顺序. ?2 Z( Z- o2 h: {& l
7.6.4 访问连接点信息
/ G+ Q" [, m1 G/ ]' Q7.6.5 绑定连接点方法入参
- n/ r% N3 [+ l: ~7.6.6 绑定代理对象* } X. Y# @+ n3 F! y/ m
7.6.7 绑定类注解对象
9 E4 g8 U$ b1 R: {& b5 _0 u7.6.8 绑定返回值
2 d3 `4 @' q6 S, k; b7.6.9 绑定抛出的异常6 F& D" N" n0 S
7.7 基于Schema配置切面
; Q0 I+ I( d, L; d. K |2 { @7 t" x7.7.1 一个简单切面的配置
! a& F% t! Q* s( s8 r: ~; a7.7.2 配置命名切点
. L( \$ M9 d, u. E* E# D8 o7.7.3 各种增强类型的配置8 x$ t8 M, z% Z$ x. X/ J
7.7.4 绑定连接点信息
A' x' m8 t8 |2 Q C/ Q: }2 J7.7.5 Advisor配置
) ]# B7 n$ A+ m7.8 混合切面类型* r) o$ v6 W5 U) e* s4 o" t7 L
7.8.1 混合使用各种切面类型
5 a! o3 Z9 p4 [1 n7.8.2 各种切面类型总结
) V, u" |! y: o7.9 JVM Class文件字节码转换基础知识
j2 r( B% D" J- }" S1 k7.9.1 java.lang.instrument包的工作原理
4 }: l$ c/ U6 ?+ o# x7.9.2 如何向JVM中注册转换器
2 r# n1 z# I6 |: y7.9.3 使用JVM启动参数注册转换器的问题
7 y5 h4 A+ B+ k7.10 使用LTW织入切面: _8 R$ w' I7 O! q7 r
7.10.1 Spring的LoadTimeWeaver
" z& y) f: Q' w7 @7.10.2 使用LTW织入一个切面$ z4 w! J D9 l6 c* [
7.10.3 在Tomcat下的配置/ i6 a; E( j+ q! `" A
7.10.4 在其他Web应用服务器下的配置! P' x/ ^, r2 x: y# @) ]; Q5 i! Z, L
7.11 小结
) A3 i9 |/ k/ m8 L! P4 h% ^# u" K
第3篇 数据访问3 D& Z3 N- R! b: P! z3 s
第8章 Spring对DAO的支持
9 Z3 H. B. M0 b2 { b( Y& w8.1 Spring的DAO理念7 [6 c; Q3 ~2 I7 `$ e" U5 R# j
8.2 统一的异常体系3 d" a) X6 J# i. i3 n
8.2.1 Spring的DAO异常体系# D, D" Q* W6 s2 X$ O3 K: C% R
8.2.2 JDBC的异常转换器/ T; K6 I5 z7 F) d* X5 \8 U& w) M
8.2.3 其他持久技术的异常转换器
) M/ z/ A7 w0 a6 ^) ^8.3 统一数据访问模板6 I6 a( D0 s9 w3 s- p8 C8 V, f
8.3.1 使用模板和回调机制- m; s9 c1 s1 ]8 `
8.3.2 Spring为不同持久化技术所提供的模板类' C- r3 t' y+ [- b) b
8.4 数据源2 F- m' V& x3 U) d
8.4.1 配置一个数据源! i/ @. G" W$ |, t, Y2 \
8.4.2 获取JNDI数据源
; {) |- t. f$ \2 l* P5 }% w0 `3 W8.4.3 Spring的数据源实现类3 o9 ]$ g: x1 e) `7 T( [% ?
8.5 小结
- J4 w0 W; v2 N5 u! q ~第9章 Spring的事务管理
8 t6 k7 c: m1 ^. O* j9.1 数据库事务基础知识
( A- C: I6 U" B1 U2 D9.1.1 何为数据库事务
9 \+ A4 ]$ g( ~) I$ K7 U9.1.2 数据并发的问题
; @8 ^$ t# Y/ D: f4 H# N0 C/ [) [9.1.3 数据库锁机制# s' Y3 ?3 ^' o& v1 @2 f
9.1.4 事务隔离级别2 c2 \2 M' s, l; R# |, y5 V$ E: t
9.1.5 JDBC对事务支持& l0 Y' m6 L V. Y0 g2 l4 V
9.2 ThreadLocal基础知识& J" d* H$ l0 Y" Z3 x
9.2.1 ThreadLocal是什么
/ a% x7 A( X( N0 l9 o ?( L9.2.2 ThreadLocal的接口方法
$ A4 y' q& Q; E; b9.2.3 一个TheadLocal实例6 u$ y; {/ ~- N. ~6 ?- f
9.2.4 与Thread同步机制的比较
5 a; W _" n, J! z0 p9.2.5 Spring使用ThreadLocal解决线程安全问题
" Z9 n' u: n h$ v3 S ?; w6 _9.3 Spring对事务管理的支持
$ J2 d8 o. F7 ?) ?, k( C9.3.1 事务管理关键抽象4 m4 V' W/ p; }" z) o+ C2 f( o+ Z4 f9 X
9.3.2 Spring的事务管理器实现类
0 X8 [% E, q! a+ d; E) h9.3.3 事务同步管理器; J$ x% p2 W- W
9.3.4 事务传播行为+ t! L; f) I+ i" A
9.4 编程式的事务管理
! K4 P( H" a& e" ~9.5 使用XML配置声明式事务
+ d& J/ c) y$ p4 ?6 Q4 H, k9.5.1 一个将被实施事务增强的服务接口 g; G+ Y) W; i/ x: X8 [
9.5.2 使用原始的
: @% \6 H5 D, p6 _. A dTransactionProxyFactoryBean, g( D; c: Q, a& p, e) g& v9 \
9.5.3 基于tx/aop命名空间的配置
9 X% f! t1 z" a- ]7 B0 G9.6 使用注解配置声明式事务
; ]0 G2 j2 ]5 g" ~9.6.1 使用@Transactional注解+ T9 {3 ?' U" D; k' H
9.6.2 通过AspectJ LTW引入事务切面
8 ?0 m: a [8 D0 p& X0 \9.7 集成特定的应用服务器6 t* P8 E9 K" k$ I w1 b Z
9.7.1 BEA WebLogic( H8 n$ l/ E2 @/ F
9.7.2 BEA WebLogic. _: c) m$ w! @# H/ y" b
9.8 小结
! D& E7 [* Q( j0 `# v2 u2 W第10章 Spring的事务管理难点剖析
' C+ h# d7 T A) x% f* n, S: e8 v10.1 DAO和事务管理的牵绊6 b4 g: A, T' v+ ?0 e
10.1.1 JDBC访问数据库1 ?# Y. m4 {" ~3 h8 E+ C
10.1.2 hibernate访问数据库
4 m! s0 [" P: ^" W" u: ?$ L6 h+ {10.2 应用分层的迷惑
4 N; ?% [! a& ?& `10.3 事务方法嵌套调用的迷茫- ?* d) K) [$ z7 P1 p& S
10.3.1 Spring事务传播机制回顾0 b3 I, v- ?# r+ h% H4 x: x2 K
10.3.2 相互嵌套的服务方法
3 A5 A+ \- d5 e9 d10.4 多线程的困惑
/ r+ F' D5 I/ ]) b$ _10.4.1 Spring通过单实例化Bean简化多线程问题
! n4 c+ p, p: t" r10.4.2 启动独立线程调用事务方法
# X% `: p8 x% x) T; z3 a# D% @, L% u10.5 联合军种作战的混乱3 \& ^' L: T( v* v6 v
10.5.1 Spring事务管理器的应对' D' {! W0 q) J8 ~7 n+ k; ]
10.5.2 Hibernate+Spring JDBC混合框架的事务管理- E. b f- v4 F$ u1 d
10.6 特殊方法成漏网之鱼
3 i" ~' n3 W$ ]( s1 q$ q8 z10.6.1 哪些方法不能实施Spring AOP事务
, U7 V2 m( S! ^" L X10.6.2 事务增强遗漏实例
5 _ }6 ?; d8 T1 j* X10.7 数据连接泄漏
! I' b |9 ?5 D ^# ?10.7.1 底层连接资源的访问问题/ ]) j0 _7 l2 J/ N4 Y8 w4 k( G
10.7.2 Spring JDBC数据连接泄漏- y' \; u8 c9 V. D) [
10.7.3 通过DataSourceUtils获取数据连接
# g" B% F! n- E" i# u+ A4 g/ |7 y10.7.4 通过DataSourceUtils获取数据连接
5 U# d, M: W' ]7 ~! v' @10.7.5 JdbcTemplate如何做到对连接泄漏的免疫4 P$ c5 N* C( c4 E# f
10.7.6 使用TransactionAwareDataSourceProxy
' u6 N5 T: M9 ]7 z) ^* u10.7.7 其他数据访问技术的等价类
6 V& }; S/ E- i10.8 小结
5 M; x1 \6 ^9 g第11章 使用Spring JDBC访问数据库
: p3 I+ H5 _: D4 \1 `' C' G! J11.1 使用Spring JDBC+ ~. ^- ^* k& W% V
11.1.1 JDBCTemplate小试牛刀
) w8 P0 O/ K' F% `- b! ~11.1.2 在DAO中使用JDBCTemplate
5 F3 e: E( w, {11.2 基本的数据操作
8 T: l# c9 }# |! p; M4 U11.2.1 更改数据
% T3 I( f) I' f; }11.2.2 返回数据库的表自增主键值
5 @, i: G9 `( C/ V! A6 ~11.2.3 批量更改数据
( I& c: N5 W- H7 w11.2.4 查询数据
l o, I$ I; d [ A/ l11.2.5 查询单值数据' L; w% ?. J$ O
11.2.6 调用存储过程2 w/ [+ U/ x; M8 F) `* m
11.3 BLOB/CLOB类型数据的操作1 O6 ~ _; g( b% x! y! K9 J$ x
11.3.1 如何获取本地数据连接
/ J! i& j8 s* `2 S# S0 L11.3.2 相关的操作接口
# F7 ~! T2 \+ d, m) T: L& i11.3.3 插入Lob类型的数据
- U0 Y% G+ h$ j1 q7 [: Q' ]/ P11.3.4 以块数据方式读取Lob数据8 h+ y4 \4 L9 e& Y! ^. Q
11.3.5 以流数据方式读取Lob数据2 Y2 s% H4 L" @" o, U
11.4 自增键和行集8 @ j: h e0 S( [
11.4.1 自增键的使用
6 n4 a. ?& q% p0 q( }11.4.2 如何规划主键方案& H, s3 n9 r5 |: G' i; a; \- r1 z; x( K
11.4.3 以行集返回数据) E: T3 g3 `+ g. h3 f
11.5 其他类型的JDBCTemplate1 d& ]9 S- R+ |# X9 y. L
11.5.1 NamedParameterJDBCTemplate
$ H! X, @2 W0 D* m% P11.5.2 SimpleJDBCTemplate/ u7 j/ ]$ w8 k! K+ ~
11.6 以OO方式访问数据库5 R, Z+ l4 G( f( K0 t" x; q& P
11.6.1 使用MappingSqlQuery查询数据
( x( C3 X2 C! n3 I: ~ S11.6.2 使用SqlUpdate更新数据: _8 g f8 q) e1 u1 X
11.6.3 使用StoredProcedure执行存储过程+ o( A B/ a% O* G1 z2 R
11.6.4 SqlFunction类. A* t) @; G3 o0 E9 L( {' y/ t
11.7 小结
+ _ ?" ^' k3 Y$ l5 |" G P4 b第12章 整合其他ORM框架
7 @* Q7 M; E8 y$ z4 u5 a. J6 f. e12.1 Spring整合ORM技术; }" T* `7 i, J0 g- Y, n- u
12.2 在Spring中使用Hibernate
+ k ]. d5 O P5 \8 v H12.2.1 配置SessionFactory
" ]; R. B# a, @5 T% u$ Y/ d( a12.2.2 使用HibernateTemplate
; O& W% n0 o" M, ^; Q4 h12.2.3 处理LOB类型数据1 v% B) m" N3 j- V, p
12.2.4 添加Hibernate事件监听器
0 F: O6 ~3 y8 m9 }4 }3 n% F/ r3 G* s12.2.5 使用原生Hibernate API/ V8 Q4 H6 P1 E3 ?/ n0 B4 |9 Z
12.2.6 使用注解配置
, S& D" p4 p0 c* |$ ~2 N4 a' U12.2.7 事务处理0 y5 I0 P- i: }
12.2.8 延迟加载的问题
7 |, h: k# x7 h* S4 D0 y- b12.3 在Spring中使用myBatis+ N1 m/ K1 n) v1 x4 s
12.3.1 配置SqlMapClient
# L8 D# N5 d+ l; y& j }7 l/ ?12.3.2 在Spring配置myBatis8 b+ z3 ]0 w! y+ c
12.3.3 编写myBatis的DAO& w7 |2 b) G4 T( D+ s5 |1 ]
12.5 DAO层设计* S- M+ w7 \8 A0 e$ g) v; ]
12.5.1 DAO基类的设计
" T; ~8 T/ E: f( ]1 U1 l7 L12.5.2 查询接口方法的设计! e6 u: i! g. v( A
12.5.3 分页查询接口设计; B+ _% J9 d9 D$ B2 Y! ]3 V
12.6 小结# t; _5 Z2 y& _) L$ f2 m7 X+ e
9 s' E, E: p- S* O; t/ h0 r' `; W第4篇 业务层及Web层技术
2 t6 P2 T& @8 {9 u7 z, G第13章 任务调度和异步执行器+ R6 @2 T8 P x
13.1 任务调度概述
2 z2 [8 p7 s& [9 H1 N$ V o) E. L13.2 Quartz快速进阶0 C |/ w* m r, z4 K: t- r
13.2.1 Quartz基础结构
# _, ~: q* i. m ^5 L5 ]13.2.2 使用SimpleTrigger
2 w; A0 z7 A# r& e# Q13.2.3 使用CronTrigger
1 c) F8 Z4 P' d, J13.2.4 使用Calendar
4 O( S: q# S& u5 i13.2.5 任务调度信息存储
" N- m+ x, r! ]13.3 在Spring中使用Quartz
- O C& [# V* E" V# @8 C- q13.3.1 创建JobDetail* z8 b" ?: C9 R5 y$ M2 ?1 `
13.3.2 创建Trigger
, S7 ~9 o$ Y% q! o13.3.3 创建Scheduler% A" }' W5 ^ d( d1 M, `
13.4 Spring中使用JDK Timer$ G3 u; B3 R# n z4 y9 [
13.4.1 Timer和TimerTask6 {& [+ l6 s: _% A& t. a z! F9 z
13.4.2 Spring对JDK Timer的支持
8 ~9 {$ v, u2 Z* {9 @) H' }( a. q13.5 Spring对JDK 5.0 Executor的支持
$ i8 X. }0 v& \" A9 B13.5.1 了解JDK 5.0的Executor
. c- R$ h1 T% X" X13.5.2 Spring对Executor所提供的抽象
/ |. G' l* H" B) K13.6 实际应用中的任务调度& g" ]1 W y9 D# S
13.6.1 如何产生任务9 ^5 ?5 s# v% z1 x- h( O2 {( B3 b
13.6.2 任务调度对应用程序集群的影响
, b6 Q2 g/ D9 a- j9 `9 F U13.6.3 任务调度云
+ Z7 G$ S7 k$ b4 y% A9 d13.6.4 Web应用程序中调度器的启动和关闭问题
: q! E3 f: X% x7 X; z, ~13.7 小结' C/ d* P* K9 S4 Z: ~
第14章 使用OXM进行对象XML映射% k7 i+ S8 w. B y8 j/ B
14.1 认识XML解析技术& ^3 O) P4 ]9 a; ]: L$ L
14.1.1 什么是XML
% l" o# C+ L! I a14.1.2 XML的处理技术* Z- V# I' R9 g0 X5 g e3 l
14.2 XML处理利器:XStream
6 l" G% H' D" m1 m7 c14.2.1 XStream概述
% h9 j. ~5 f+ J8 A$ y+ M! T" T14.2.2 快速入门
, J: x% E$ \6 B; U8 w9 C! m14.2.3 使用XStream别名5 o+ }/ q5 l7 {$ L' u5 E' m6 l
14.2.4 XStream转换器
0 f9 |: Z1 \3 P14.2.5 XStream注解
* {$ F! `! ], J2 ]- \14.2.6 流化对象. m0 q" F# ?1 e& \4 n* S: b
14.2.7 持久化API# L6 X" m7 H. c# I
14.2.8 额外功能:处理JSON8 }( ~+ e# q0 F6 ]
14.3 其他常见O/X Mapping开源项目
. Y8 a! ?# |% w( D! R. x" w14.3.1 JAXB
# U- j! _3 D$ C% c5 l; n7 [$ e1 I7 P14.3.2 XMLBeans1 G0 ?7 E5 ^5 D' a f
14.3.3 Castor3 V$ @3 o0 S" c4 C; C
14.3.4 JiBX3 }) u$ s4 P+ }* ? ^
14.3.5 总结比较
9 G Z+ R o: {7 k3 g14.4 与Spring OXM整合
; y% f! N2 K6 Z" F6 q0 C14.4.1 Spring OXM概述$ M5 l/ f* k/ U |- i% l- u0 C% F
14.4.2 整合OXM实现者
6 k! t% R- c7 a9 V# G2 y14.4.3 如何在Spring中进行配置9 C+ r, u0 S% P- q6 ^
14.4.4 Spring OXM 简单实例3 J6 z$ ?1 ^" o% `% e' I
14.5 小结/ ^+ E' I7 x3 ^9 |4 L" ^
第15章 Spring MVC# a1 b; p. `4 O3 O/ V
15.1 Spring MVC概述
( d' K& e$ ^9 \% }15.1.1 体系结构* f! d# i+ N7 k, M5 R
15.1.2 配置DispatcherServlet
& ^5 ^+ m5 A5 Q4 f. h15.1.3 一个简单的实例
3 o! v# s" n: g, b15.2 注解驱动的控制器* }, v7 z6 X7 z1 A6 A5 Z
15.2.1 使用@RequestMapping映射请求- }: d- Z( V! K* l
15.2.2 请求处理方法签名概述
# I0 H3 t; r4 T! K! |15.2.3 处理方法签名详细说明
1 s8 l2 t* Z; y+ S' @( }4 E+ e! j15.2.4 使用HttpMessageConverter<T>
+ K" t0 b1 C8 b# `- a* I15.2.5 处理模型数据
- l0 |' D% i2 }- v* x- a15.3 处理方法的数据绑定1 q- _: E: U! H8 P. F4 u/ G
15.3.1 数据绑定流程剖析- c0 z8 R6 \8 d# D- W
15.3.2 数据转换' z: t8 [! v, S( a% @+ [
15.3.3 数据格式化
6 \' }8 O# T7 {' ~& E15.3.4 数据校验 g, _* ?0 O+ h5 g6 b
15.4 视图和视图解析器. y. W) k: o& ?
15.4.1 认识视图+ b( n, f/ m7 f. G% Z
15.4.2 认识视图解析器
+ U( G4 I) f9 A; c( A [5 G, Z15.4.3 JSP和JSTL3 j* Q- f9 l% L( `" t
15.4.4 模板视图
# T8 e- N5 K+ Z* U, p15.4.5 Excel
7 b/ |, |% M, y1 y15.4.6 PDF
; n- k% F$ C' _15.4.7 输出XML
. b m" z2 m9 I ]: a15.4.8 输出JSON
* k- u( a' ^& ?3 m9 X15.4.9 使用XmlViewResolver
6 N5 l* l8 \' E% y0 @7 o15.4.10 使用ResourceBundle ViewResolver* ]. A* J+ k5 m! t
15.4.11 混合使用多种视图技术
. V2 k. y G9 X) r: _15.5 本地化解析. V) A' z3 `9 K8 B% \1 ?
15.5.1 本地化概述, h; X+ a+ ?; c9 a) ?
15.5.2 使用CookieLocaleResolver8 o# S7 ?$ B1 E
15.5.3 使用SessionLocaleResolver) L/ L; q, q+ @ t- u! b' C5 n' q
15.5.4 使用LocaleChangeInterceptor
1 y2 i9 c5 }) M' o. I4 j3 P15.6 文件上传
, v/ x3 t9 I; Z15.6.1 配置MultipartResolver
/ X# ~3 W% H3 {8 ]15.6.2 编写控制器和文件上传表单页面
" o* ~2 O P' P* F+ _# Q/ x15.7 杂项
: B& a; {+ H- L3 E15.7.1 静态资源处理. t, \, M( V; E1 Q) X# F6 v
15.7.2 装配拦截器
; ?4 d5 M3 f; m' u2 J B15.7.3 异常处理; s, }0 _+ z0 h. L9 f
15.8 小结/ x/ M/ U; k6 j1 s3 L
+ ?- s% P8 ^7 W4 ]. V第5篇 测试及实战
+ C% G- C7 T+ [+ g第16章 实战型单元测试
: \0 j" l- N/ }0 S. |( B16.1 单元测试概述
6 W( N1 v+ E& V" T( L0 X: c& M16.1.1 为什么需要单元测试% J4 Y! M% Q D; u+ |* ]
16.1.2 单元测试之误解; o' C( {& k9 l. j" V6 K! q
16.1.3 单元测试之困境
# t' t' Z& l, [1 n M16.1.4 单元测试基本概念. l4 t& J2 T5 q- b" e" I' f2 L
16.2 JUnit 4快速进阶' ]9 G i! y2 a' e
16.2.1 JUnit 4概述
/ Z( a. d/ D8 R) k, B/ T) I16.2.2 JUnit 4生命周期 G9 i. [4 W! ^5 P) M8 M
16.2.3 使用JUnit
& l6 V! i& M% ~% O5 Y- T, v16.3 模拟利器Mockito
8 ], L1 P6 M7 ^7 ?6 A16.3.1 模拟测试概述
; c3 ^8 D( @- V. a8 O16.3.2 创建Mock对象
' M6 f: A+ o& x16.3.3 设定Mock对象的期望行为及返回值
. Y# F5 O& t$ E% _, G- G. p# V16.3.4 验证交互行为3 R% o% h, u; e6 L5 q7 \9 ]
16.4 测试整合之王Unitils
( d8 U! }2 D+ U; A# \$ D16.4.1 Unitils概述
3 I: X' J: |$ S16.4.2 集成Spring
$ J7 L2 G7 A+ F2 J6 E16.4.3 集成Hibernate6 ^. O1 g! X2 S
16.4.4 集成Dbunit
! ~# o& R# Z- y. e5 u) Z, d* Y16.4.5 自定义扩展模块
: s0 n8 g. s) @% {16.5 使用Unitils测试DAO层
$ I- ?# I- _8 f7 f9 F: p16.5.1 数据库测试的难点9 E0 o+ D2 J2 I d q
16.5.2 扩展Dbunit用Excel准备数据5 N+ h8 V$ h" h" |/ E& P+ s& O
16.5.3 测试实战
8 S. L9 M. q h6 Z# x8 T16.6 使用unitils测试Service层4 `" T' T: ~* C2 t% G9 C
16.7 测试Web层
" K, G* a1 H( Q- y+ N16.7.1 对LoginController进行单元测试
/ A G- e% e" z7 f) P16.7.2 使用Spring Servlet API模拟对象
5 P9 @% }4 {/ L t16.7.3 使用Spring RestTemplate测试4 C# h' F" t5 V4 |. z
16.7.4 使用Selenium测试' c/ _+ N7 Y8 O1 p7 Q& B
16.8 小结
, ]8 G. K* ~4 k7 {7 w/ E& j! u第17章 实战案例开发) T# A; A1 _( q7 R6 n
17.1 论坛案例概述
: x1 f# \4 L! a, @+ w" |+ z17.1.1 论坛整体功能结构
; J' }. A1 H! c17.1.2 论坛用例描述+ a% Y8 o6 Q" j
17.1.3 主要功能流程描述- u# s9 ?. Z6 u# k
17.2 系统设计, c$ N, P( j" |+ u
17.2.1 技术框架选择4 w' h( U/ }; Q8 ?. x3 v- Z, I
17.2.2 Web目录结构及类包结构规划
$ U* `* i: _( B/ y( B17.2.3 单元测试类包结构规划
' e. ` T( w* i6 r9 P/ b17.2.4 系统的结构图+ {+ W. W" _4 m1 m! S. {
17.2.5 PO的类设计
+ Q- {1 b7 X9 P7 @8 p P17.2.6 持久层设计
7 a3 D0 t: d4 \( z- d" n, e5 ^17.2.7 服务层设计
* S3 g! W# b% _7 G, Y: c: D, |( @( Q/ b17.2.8 Web层设计 l0 ]. W+ t _/ [ r/ \ f* @+ A" F
17.2.9 数据库设计
% F, R8 c5 l8 R17.3 开发前的准备
! W! ]" I7 ]6 v' Y17.4 持久层开发
1 L" Z5 S8 a, y, s* S17.4.1 PO类/ \% r I: f1 k- R! k
17.4.2 DAO基类4 O& B( @6 c1 `& q; {& c j/ |
17.4.3 通过扩展基类所定义DAO类
, v6 r8 l* b5 m: q) L. `17.4.4 DAO Bean的装配( q% j0 `9 ^ t
17.4.5 使用Hibernate二级缓存
9 J+ e7 o2 W( ^1 W* `7 Y- b17.5 对持久层进行测试
/ z1 _0 Z- s: {# U3 f. V# D17.5.1 配置Unitils测试环境* H/ ^4 k' \, k7 g* _& Y" g
17.5.2 准备测试数据库及测试数据
) }. A) y* e/ q' u17.5.3 编写DAO测试基类
) n' C5 F( Q- J' Q4 h; Y O- F17.5.4 编写BoardDao测试用例' Q, b+ ~( Q0 o! Z7 ~# a
17.6 服务层开发7 u+ u$ P6 b& H! _( h! Q
17.6.1 UserService的开发; V- g' |' T- Q% v. i+ `
17.6.2 ForumService的开发
2 f+ J( X9 b" e+ V- i6 j. b17.6.3 服务类Bean的装配
. K1 ^- \' r' E: p3 _9 \- p4 O17.7 对服务层进行测试6 j% F$ y- R, r5 T8 ]; A5 ?
17.7.1 编写Service测试基类
: I- ?5 W, w1 ?0 K* L) r" R17.7.2 编写ForumService测试用例8 S- O1 _6 R1 \, [6 I) E2 d# Z3 t
17.8 Web层开发
' U/ c$ Z6 x+ w, M8 {17.8.1 BaseController的基类- F* w2 {9 G+ b* W
17.8.2 用户登录和注销7 e$ H9 c; I9 m7 z D. r
17.8.3 用户注册
' D* \* W2 c' W j/ m17.8.4 论坛管理
( j, K k$ d* L& Z% b% f) I7 F6 T17.8.5 论坛普通功能4 l+ C- ?7 [* V
17.8.6 分页显示论坛版块的主题帖子
5 }' y" W1 l' H$ k1 ?& o+ o9 Z17.8.7 web.xml配置( Y/ C$ h% j {3 A$ q# `
17.8.8 Spring MVC配置4 b& ?+ t3 D( ]/ Z2 g& K
17.9 对Web层进行测试
9 }- E9 p" \' Q+ I17.9.1 编写Web测试基类
0 s' K4 c& R8 _6 Q' [ P) D17.9.2 编写ForumManageController测试用例
% a* w! w6 A9 `3 Y( L/ X, q4 P17.10 部署和运行应用
; k+ {8 ]' v1 R. n17.11 小结8 p4 n3 S$ e: [6 v3 j {8 z6 ^: L* U
以下内容详见本书配书光盘:
. t& d4 I8 ~7 [/ ]4 c附录A JavaMail发送邮件1 N4 [! T! K' C/ m
附录B 在Spring中开发Web Service
0 Z6 Q; X& _ P! F9 x; [% e) J' Q; j2 Y I
Spring 3.x企业应用开发实战(高清版)2 _: A$ O5 H/ J* K, g, C* v! h
( q- ^3 ?5 Z8 x, r
& }& P( Q$ [/ z' a, G |
|