java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14883|回复: 61

[java电子书] Spring攻略(第2版)(Spring攻略(第2版)) PDF 电子书 百度云 网盘下载

  [复制链接]
  • TA的每日心情
    开心
    2018-4-8 22:14
  • 签到天数: 1 天

    [LV.1]初学乍练

    1835

    主题

    1837

    帖子

    5517

    积分

    普通会员

    Rank: 2

    积分
    5517
    发表于 2018-12-3 18:08:00 | 显示全部楼层 |阅读模式
    java自学网(www.javazx.com)-java论坛,java电子书推荐:《 Spring攻略(第2版)(Spring攻略(第2版))》
    , L$ V. X+ h8 y, q) R. tjava电子书推荐理由:《Spring攻略(第2版)》以大量的实例,全面透彻地揭示了Spring框架的各项特性以及围绕该框架新推出的许多周边框架,以实际问题―解决方案―具体做法的方式,为读者展示了这一流行框架从基本概念到各种应用,*后到企业集成的各种实际运用,是Spring框架使用者必备的完全指南。 《Spring攻略(第2版)》适合于对Java开发和企业应用集成有一定了解,希望在实际开发中掌握一种全面、快速、可伸缩、可移植的工具平台的开发人员。. d7 [- K% q' w/ [1 H' v  k
    ' k0 |3 r1 N0 H
    作者:Gary Josh Long Daniel Rubio
    3 o/ R! x; A' e# K出版社:人民邮电出版社
    4 ]( J5 H1 d7 R出版时间:2012-03-01
    ) V- i! C* L$ u/ s: k* `书籍价格:88.30元
    2 s& G; H# H- |+ o9 v* j
    2 K. H* N( ?, l7 P) m& W) |. f4 n/ g2 H' e6 W8 e* |

    " j2 A  ?$ O, w, }4 r, ]3 s8 B$ A
    6 d- e" u2 U+ n6 f
    java电子书目录:
    7 h& h. t5 d+ J% E7 Q+ J* B' b$ C* Y( ]第1章 Spring简介 1
    7 ^0 A# F5 K) I$ M1 }1.1 实例化Spring IoC容器 1' R- Q' o. e$ t9 {" c! X/ T
    1.1.1 问题 1
    9 H" z2 Q6 a2 W& t0 r1.1.2 解决方案 1
    3 Q4 u' b5 ]& x$ Z+ X1.1.3 工作原理 3
    ( m9 v3 i, [1 }+ O2 P+ [' Z1.2 配置Spring IoC容器中的Bean 4
    ( S% t8 z7 Q# i9 u0 G0 J0 j* f1.2.1 问题 4+ I0 e0 o' }* z/ |4 m1 b
    1.2.2 解决方案 4; M  Z5 M! a5 K7 j: j
    1.2.3 工作原理 4
    9 h" C% ~( U  @9 F5 @# J1.3 调用构造程序创建Bean 142 J% p; @+ ~9 J5 f
    1.3.1 问题 14
    3 b: C0 B+ e2 h' y7 i" H1.3.2 解决方案 140 T5 r7 m6 x) W4 h$ Q+ d. Q5 F2 p
    1.3.3 工作原理 14
    ( H- A; y2 B9 e1.4 解决构造程序歧义 17
    " r3 Q' A; }9 I1.4.1 问题 17
    8 Y& }$ `; r; E8 o4 ~, i1.4.2 解决方案 17& p0 e" v. J+ O
    1.4.3 工作原理 17! b2 Z$ k6 X  L* F5 {( E
    1.5 指定Bean引用 20
    , n- N6 ^3 \# _! v# V( ^1.5.1 问题 20
    " B2 k. x) o# z" g( v1.5.2 解决方案 20
    : q: s1 k- w' @: |. i2 J( O3 s( S1.5.3 工作原理 20+ }$ a+ b1 _- o' j4 E" ^. k: B
    1.6 为集合元素指定数据类型 243 o5 m" m# L$ s( {( \1 y. m
    1.6.1 问题 244 o. I* H4 y9 x( W# t6 }
    1.6.2 解决方案 243 L% e! n" Q& R! y/ N/ h! n  ~
    1.6.3 工作原理 24
    ' o- D" u- e3 e6 P7 H1.7 使用Spring的FactoryBean创建Bean 27( @* [, l9 }; d% T) }
    1.7.1 问题 274 S! {; z% W: F0 A% g8 p5 o
    1.7.2 解决方案 27
    % n9 |, o% \# V7 i! j1.7.3 工作原理 27
    / @/ d2 D; V8 s: f, W" p9 B1.8 使用工厂Bean和Utility Schema定义集合 29  b. D% o9 y7 ~6 Z' V+ M. ~
    1.8.1 问题 29
    0 P8 `2 Z" D( `3 `2 ]1.8.2 解决方案 297 r0 I& j6 Z8 Y1 i3 y, D( I0 W$ g
    1.8.3 工作原理 29$ l, J$ d9 J' W: E
    1.9 用依赖检查属性 315 [5 y; l% D1 K' v
    1.9.1 问题 31
    ) a4 v& R* V& g; P1.9.2 解决方案 32
      _( m5 J0 z# g7 Y+ E1.9.3 工作原理 32
    , y6 b% f6 J% o& q6 Z/ |1.10 用@Required注解检查属性 34
    5 P& s1 n+ M* E) _7 b  N7 e% ~7 \1.10.1 问题 34; s% W2 m& Y2 {, F  {
    1.10.2 解决方案 34
    7 v. o+ E& L7 v2 {1.10.3 工作原理 34
    - h& f2 ?. N+ l; y7 g1.11 用XML配置自动装配Bean 36' b$ ?6 }* v9 ?' M
    1.11.1 问题 36
    ' r' m) d& H* r- t# Z. Y$ ~1.11.2 解决方案 369 O$ {3 w8 Y' u; x4 Y7 q
    1.11.3 工作原理 37
    1 Q9 L3 a& X4 v$ q; {1.12 用@Autowired和@Resource自动装配Bean 41
    . M0 F) y' V( ]2 J' @' X1 |1.12.1 问题 419 h9 Q) S/ T( K8 C( N
    1.12.2 解决方案 416 p' Z* u) c; H, b& A1 G
    1.12.3 工作原理 41
    % |7 }3 w' S) k1.13 继承Bean配置 47
    / }: S7 @: |& T% ^1.13.1 问题 47) ]% V2 W0 g- U! j8 O# |
    1.13.2 解决方案 47; |- {- R5 Q) j& N8 W
    1.13.3 工作原理 48
    " k$ a2 i# c# B. N. a1.14 从Classpath中扫描组件 50& J2 s; `3 q8 P' U
    1.14.1 问题 50) f# n( ^8 e) m8 ~( B1 U$ q& k
    1.14.2 解决方案 51
    9 }- i$ R! u* V  L/ u3 G1.14.3 工作原理 51* f0 H0 W: x0 W( ^
    1.15 小结 566 g0 \! H2 F$ m
    ! `) y6 g1 n4 A; X, i4 t( J- ]
    第2章 高级Spring IoC容器 57. e6 J2 _$ e3 \' @
    2.1 调用静态工厂方法创建Bean 57
    9 F+ h1 c  k( Y2.1.1 问题 57& x! i( O* j& C! x, M( t) b" A- F
    2.1.2 解决方案 57" |. q# g+ X7 H' q& {$ q( Y
    2.1.3 工作原理 57
    3 ~4 U1 v, u  L, k- f/ M2.2 调用一个实例工厂方法创建Bean 58
    5 n- N+ _, I( ]) t2.2.1 问题 58  y, n$ e8 q0 j1 K* t
    2.2.2 解决方案 59& ~8 y/ T2 E% H' N4 R
    2.2.3 工作原理 59
    6 \: S5 ^  x, O3 E& q$ }2.3 从静态字段中声明Bean 60
    . v0 k9 [2 c6 n" f% H5 Y( B5 R2.3.1 问题 60
      }) ~3 N) L% m6 q* [' m, W6 D2.3.2 解决方案 60% y( H3 A- i1 G* s
    2.3.3 工作原理 617 C* \* Y: S; Z  k6 p8 @' [$ }2 q
    2.4 从对象属性中声明Bean 62& g! t$ Q& }% h4 o
    2.4.1 问题 62
    ! b4 A1 j( o9 ?$ \: g3 ]' ^2.4.2 解决方案 62% }: c7 f9 ~; x
    2.4.3 工作原理 629 u- [/ M3 a. ]* m' v: Y$ ?5 d
    2.5 使用Spring表达式语言 64. ]5 S, h6 Q2 y5 j' o
    2.5.1 问题 64, `% Q' |" F/ Y  `. [  E% ?
    2.5.2 解决方案 64, w$ U5 P5 g" @
    2.5.3 工作原理 65
    % ^9 \' Z9 T, B3 ?, s2.6 设置Bean作用域 695 w3 H7 P0 b" Q* z( \4 B
    2.6.1 问题 69
    # h9 L4 B0 T/ E1 h* e8 o2.6.2 解决方案 69
    ( p7 X* q6 F; w8 Q: T8 h4 ]* B& K2.6.3 工作原理 709 g$ N9 [4 r& t9 @( g
    2.7 自定义Bean初始化和析构 72- P( v* k( Y! H" |" ^( H
    2.7.1 问题 72) B/ b. A4 M+ c7 J2 c6 E# O
    2.7.2 解决方案 72
    * Y; W7 @/ _! j) c6 I4 @2.7.3 工作原理 725 ?! Q3 t8 h9 q: A% w) v+ k
    2.8 用Java Config简化XML配置 776 N6 _9 Z& W% d) |+ N* V7 ~
    2.8.1 问题 77( X, V: A$ `7 E1 G6 u
    2.8.2 解决方案 77
    ( E# g  w1 i1 u  @. U, A" q* R2.8.3 工作原理 77
    / I5 N# j) r! D9 I1 S9 u2.9 使Bean感知容器 81) m7 t* f" S# _) f. j( W
    2.9.1 问题 81
    2 s" Q: F# h+ C2 \" H2.9.2 解决方案 81
    : U: A8 s6 T1 ?/ W  G2.9.3 工作原理 82% D: L* M2 n- h! L# U
    2.10 加载外部资源 82
    " w; ^7 Y* O5 y- x% \2.10.1 问题 825 W! }3 n6 |4 v* Z5 m% M
    2.10.2 解决方案 836 [, j$ ~6 g0 _; f! y4 X" M1 |
    2.10.3 工作原理 83
    0 M' X1 r+ K6 T6 n- m0 V2.11 创建Bean后处理器 85
    0 ~1 @" B% P9 j" K+ P2.11.1 问题 85# B0 L+ ^) c$ E/ Y9 U
    2.11.2 解决方案 857 f, Z, t6 M% Y
    2.11.3 工作原理 86
    7 G8 n: C3 o# u1 b$ w, O* n2.12 外部化Bean配置 89" h8 j2 V/ F7 n
    2.12.1 问题 898 V7 S0 }: z. V6 F6 @' g
    2.12.2 解决方案 89- H7 ?" S' T' L% @, C& S
    2.12.3 工作原理 90
    / Z/ ^$ r/ G# l4 d1 g" M2.13 解析文本消息 912 S( b8 z  L& j4 _1 @9 \5 T
    2.13.1 问题 914 o8 m9 P! C7 o5 R# |
    2.13.2 解决方案 91
    4 c+ L1 a6 ]2 ]2.13.3 工作原理 91
    ; P8 X; P7 k' j, e; b: j1 v2.14 使用应用事件进行通信 93
    9 @: |/ M& @* r9 x8 L3 x* {2 F2.14.1 问题 937 W3 x& |9 R& U' d, F
    2.14.2 解决方案 93
    4 N1 M/ Y1 z" B# |, D3 s2.14.3 工作原理 942 U0 P3 K8 p5 f+ ]+ W' g/ @( I! R
    2.15 在Spring中注册属性编辑器 96
    6 y% K" m8 Q' ~/ \$ i$ ]0 H  U2.15.1 问题 964 t# w0 U% p% ]
    2.15.2 解决方案 96
    ; M' n$ [" ?, J' f; ]0 v2.15.3 工作原理 97* D  G) B2 F2 y% W# m: j
    2.16 创建自定义属性编辑器 99" t8 V8 o; E. b6 c! L
    2.16.1 问题 995 h7 [, L3 X4 }+ k& p6 l
    2.16.2 解决方案 1000 g- M5 L  g% w% b1 |
    2.16.3 工作原理 100
    " \9 N7 J+ o6 P2 @, g% h( a2.17 使用TaskExecutor实现并发性 101
    8 v( p  p$ a$ G( C' e1 V2.17.1 问题 101( ]5 U8 e5 G# I. a; i6 z
    2.17.2 解决方案 101& q# j. `- U% B+ Q8 ]3 d) W8 X
    2.17.3 工作原理 102* f- E0 F4 l- o
    2.18 小结 110
    , x2 T5 X6 y' |; V9 {8 `/ S1 F( C" l" l$ k: Q1 ^: S
    第3章 Spring AOP和AspectJ支持 112
    , N/ `3 a. D4 J3.1 启用Spring的AspectJ注解支持 113
    - c' P- I% B' K" G6 M3.1.1 问题 113
    , D% A7 i; o( T* U0 b3.1.2 解决方案 113
    , P  f8 F% S! k/ ~2 {3.1.3 工作原理 113
    7 m, d* g- o0 Z$ W7 r' U) R" V; p3.2 用AspectJ注解声明aspect 115
    ( L2 C# H& D2 W$ o7 b) P3.2.1 问题 1154 L0 V, p7 |+ ^# I+ V1 a4 O
    3.2.2 解决方案 115
    1 J" Y6 l  T8 ^0 z7 f3.2.3 工作原理 116
    : W" t& G7 z  t+ c9 I3.3 访问连接点信息 121
    , [4 ?( ~8 L2 x. `/ {% S  v$ s* [3.3.1 问题 121
    9 L8 J$ C/ w. o. j2 ~3 t3.3.2 解决方案 122
    ; n1 y1 E7 P# [& j1 F) q3.3.3 工作原理 122! |6 M* |/ W& p: x# J( E
    3.4 指定aspect优先级 1232 _6 i. G" t& D$ ~' G
    3.4.1 问题 123% w0 W1 n( N9 D: x1 P$ D9 v5 N
    3.4.2 解决方案 123* L. g# H5 v5 Z. H, p. Z# N
    3.4.3 工作原理 123
    ; @1 J! w" I. v3 O& _5 _3.5 重用切入点定义 125- U: r8 i* `; W. I) F
    3.5.1 问题 1253 d5 g" M. q6 _; [
    3.5.2 解决方案 125; Z7 E( w+ H# s, P) \( S- W
    3.5.3 工作原理 125
    $ ~, P/ U+ v) N- d+ c. B" e3.6 编写AspectJ切入点表达式 127
    ) a: U0 j: s$ ~3 V9 k* ?3.6.1 问题 127
    , t8 A. N) m3 B% |3.6.2 解决方案 127
    9 Z+ @' o/ o. h# t0 s! ?6 ]# d7 S2 X+ O3.6.3 工作原理 1284 r# e1 R9 |9 w+ Y3 x# [
    3.7 在你的Bean中引入行为 132+ r0 Q6 y; w/ C/ N% V. C+ D3 F
    3.7.1 问题 1329 ?) q9 _# B6 x: S1 }5 ?  k
    3.7.2 解决方案 132
    - A- f: Z! s9 e1 g3.7.3 工作原理 132
    ) z0 T2 K6 ]3 v. B3 K2 g& C% Q3 U3.8 为你的Bean引入状态 1359 [" l1 U: V3 F) o+ N! d# q
    3.8.1 问题 135; {* Q$ j4 A- n2 G) i: R( Q. p
    3.8.2 解决方案 1350 r6 n* L) I$ d
    3.8.3 工作原理 135
    7 ?' n6 N* r' l3 f/ R; U5 F3.9 用基于XML的配置声明aspect 137
    ( b+ b1 T* L) A6 q$ H& E3.9.1 问题 137
    ; B" A1 h- w5 e' b3.9.2 解决方案 137
    ) n! K6 n- \8 h" ^! E& M" u3.9.3 工作原理 137
    : [: m# \7 a  ]$ V. i" v3.10 Spring中的AspectJ加载时织入aspect 140
    7 L  A: U" I; S  u3.10.1 问题 140
    * i0 z- @( Z& M! _' X/ o+ n. ^3.10.2 解决方案 141% o9 |1 X) W: }4 W$ E
    3.10.3 工作原理 141& N- g+ Y( L- \) y
    3.11 在Spring中配置AspectJ aspect 146
    # P! _! |' F! o6 S$ {3 S3.11.1 问题 146
    ( N3 u# i) l' Q9 ]) i  Q& `: W3.11.2 解决方案 146
    + V- b0 \1 v. P3.11.3 工作原理 146! O/ O9 n: M/ B; F* Q
    3.12 将Spring Bean注入领域对象 147: I3 P4 _7 u$ w  G$ C" k
    3.12.1 问题 147
    : }1 P0 l9 V. s6 S1 r3.12.2 解决方案 147
    % `1 n9 Z# c& S/ R; x/ [1 W+ G4 r3.12.3 工作原理 148
    ( [$ s/ k* n8 z3.13 小结 151
    / ?; c2 C# |% `. f5 Z* v) u# f7 a. y1 q- U
    第4章 Spring中的脚本 152
    * ~/ p3 h: L; Z$ B, m& d8 f4.1 用脚本语言实现Bean 152
    4 k- j8 f# g5 \* G4.1.1 问题 152+ `2 x& ]4 E: M( H
    4.1.2 解决方案 153; T. g6 x, w  `1 c' w
    4.1.3 工作原理 153
    # Q9 t2 m& {5 H* O4.2 将Spring Bean注入脚本中 157
    9 {1 ]- W+ t" a6 e/ R; @- p8 O' I4.2.1 问题 157
    2 A" p7 Q$ q8 U4.2.2 解决方案 157) Q% c8 a, T0 y( X6 e+ k3 |
    4.2.3 工作原理 1575 p3 T7 b& |3 d) W
    4.3 从脚本中刷新Bean 160
    7 S- a4 O$ l- b/ m+ ]- W8 a9 j4.3.1 问题 160
    7 `  q' |. ~9 ?( g  C6 x# M. C( H" r! D4.3.2 解决方案 160
    6 s" u- I7 d4 _$ {3 L; S4.3.3 工作原理 160
    3 P# ?, f0 S+ B+ l% G& L7 T4.4 定义内联脚本源码 161
    6 t& {4 w, _& j0 k7 J4.4.1 问题 161
    ; A& y' u1 T, c# o! j# B  }/ ?4.4.2 解决方案 161+ @; o4 p  K" P3 U7 K
    4.4.3 工作原理 161* i4 f" R1 R6 }2 R4 M
    4.5 小结 163* B, d8 E$ Y3 \, `2 r
    4 V. U* d5 o. D: U& c( _+ G$ C' |
    第5章 Spring Security 164
    ; L5 w2 c! w5 z% ?5.1 加强URL访问安全 1657 p3 s7 t. f' E4 u( m& x
    5.1.1 问题 165; ?+ V$ w" U  Q
    5.1.2 解决方案 165) N) q6 P+ _( y+ ?, z
    5.1.3 工作原理 166
    7 u* i6 a$ E: [, B9 R5.2 登录到Web应用 175, o& a2 J- @( Y+ P5 t
    5.2.1 问题 175
    3 A! Q% @' a- ?3 f1 v) w6 w4 r5.2.2 解决方案 175% s! P; ]) ]0 T' P0 Y
    5.2.3 工作原理 175
    $ j& c# Y1 N+ f$ b; {+ y5.3 验证用户 179
    : f8 O) ~# I8 h9 q5.3.1 问题 179
    / l/ ~$ h" p; y  P% ]. w5.3.2 解决方案 1808 |7 A9 n! {* x7 p; o
    5.3.3 工作原理 180; \* Y$ b: L0 Q$ w+ U" N( g
    5.4 做出访问控制决策 190
    % L; C) k7 [1 ]2 J$ t( @5.4.1 问题 190. o& p* U( Y7 t5 d
    5.4.2 解决方案 190
    , W7 N6 S# U1 s" m& g% t) L2 d5.4.3 工作原理 1913 t* B; K. t: q) s
    5.5 加强方法调用的安全 193
    1 t* ?# h& K; q  i5.5.1 问题 193" l- V2 H8 v2 v, P9 P
    5.5.2 解决方案 1930 J+ K( M  `/ X1 ~3 W1 t
    5.5.3 工作原理 194/ O/ Y1 G) R6 |
    5.6 处理视图中的安全性 196
    / Y' m* f. q& }4 ^5.6.1 问题 196
    3 L8 \- ?. z" i1 _6 A- n: p5.6.2 解决方案 196  r& T% t: e; N5 g% \  x
    5.6.3 工作原理 1964 _! Y% H5 l3 @% o) t) D" q/ g* Z
    5.7 处理领域对象安全性 198
    " q7 p+ W3 c$ |* m, l: G5.7.1 问题 198
    8 U* n3 C! S1 h; P4 W5.7.2 解决方案 198
    0 L( q# P* W; Q- D5.7.3 工作原理 199" d# G& }8 B; f0 a, i; b
    5.8 小结 208
    0 m3 z' v5 |) S% j4 A7 K
    4 V  D. F" f6 f) Z$ F第6章 将Spring与其他Web框架集成 209. l- ~4 Z* M4 M" r
    6.1 在一般Web应用中访问Spring 209" _, [' Z6 U( J1 ?9 r4 P6 I
    6.1.1 问题 209' W% o* }( ^' Y& T/ c7 B  s
    6.1.2 解决方案 210
    + V" X( P; i, x% q9 G6 y& W% b9 ]6 _6.1.3 工作原理 210
    / ^# P1 i: ^/ e$ ?2 W8 l6.2 在你的Servlet和过滤器中使用Spring 214% s+ b/ A5 t9 }! A' I& H
    6.2.1 问题 214
    " Y5 H; X: J; A& @" L) [, Q. d6.2.2 解决方案 215
    6 n9 O9 P+ Y( U6 t! |8 x/ ?6.2.3 工作原理 215
    + {$ Y8 H  L% r6.3 将Spring与Struts 1.x集成 220. ]% H, r# F8 ^7 S8 Y
    6.3.1 问题 220
    ) l, z+ h, `  c6.3.2 解决方案 220
    ( ]) e4 |; d# {3 F( W8 O6.3.3 工作原理 220% a# ]. ]+ Q+ a! P0 Q/ J
    6.4 将Spring与JSF集成 2267 ~  E' g( I0 A8 ]
    6.4.1 问题 226% |4 h/ A" k! `  b" w8 ^
    6.4.2 解决方案 2263 A% k7 G$ X# h( D. c5 R
    6.4.3 工作原理 227
    ! B' p6 ~) X; [  i6.5 将Spring与DWR集成 232/ ~0 e: r+ d( R, h& t
    6.5.1 问题 232
    ; z6 Z4 i! X5 k. L* L- ~1 E6.5.2 解决方案 2325 n& c* W- h8 q0 r2 b
    6.5.3 工作原理 233
    5 G( y! m; w3 c6.6 小结 2364 M. H+ ?9 l  J' R6 x9 f' h* k

    , D6 a& V1 S8 T" m+ Y4 o6 j第7章 Spring Web Flow 238
    4 H% `8 ]5 |4 H+ p5 ?' k) z7.1 用Spring Web Flow管理简单的UI流程 238
    3 |" z( G, r" o7.1.1 问题 238
    - R& H6 o9 }) v/ L. Z7.1.2 解决方案 2394 Q9 |) F& [! x& W* A8 C* G
    7.1.3 工作原理 2391 j7 v% h# T; g
    7.2 用不同状态类型建立Web流程模型 246
    - k+ I9 j4 P+ G; y8 g# i$ u! l7.2.1 问题 246
    5 w2 n, `' [1 w# r- Q7.2.2 解决方案 2460 Y$ W5 Z" @/ d% |1 E
    7.2.3 工作原理 246! D3 }4 I* M1 X- I
    7.3 加强Web流程安全 2579 u3 X" \5 K& @( b7 G
    7.3.1 问题 257
    * w( K# v& M2 V! ]4 l. d% n( ?7.3.2 解决方案 2589 _8 d4 V8 m. [2 G, L
    7.3.3 工作原理 258
    2 \; ?! H6 V8 u# h. \7.4 持续存储Web流程中的对象 260: p; T8 h. ^' D6 F
    7.4.1 问题 2601 s: a* ^, L  t3 d# H9 [
    7.4.2 解决方案 260
    9 N3 a9 t8 c# x9 H. v7.4.3 工作原理 260' _, G2 R7 g" I" }
    7.5 将Spring Web Flow与JSF集成 267
    ; n9 z6 ~* c. M( s$ w0 O7.5.1 问题 267
    $ |/ J/ v8 W) F7.5.2 解决方案 267
    - L( X6 L8 ]' F# M5 i0 @- o7.5.3 工作原理 267
    ! c- I, s6 q" u/ f' }7.6 使用RichFaces与Spring WebFlow协作 275: ?' O- f( f) H
    7.6.1 问题 275. Z2 P( @* e: ?. N+ n
    7.6.2 解决方案 275
    . f; f4 F1 O" e( O8 ^7.6.3 方法 275; E* \2 E& o# I- Y% F
    7.7 小结 2795 e/ u6 J2 r2 X$ X5 W4 |. K, L

    ' I5 T: o4 }& S( [第8章 Spring @MVC 280
    ' u! b: V4 k/ x3 d+ A8.1 用Spring MVC开发简单的Web应用 280
      \  H" v% k( H7 B8 T" o# R  [8.1.1 问题 280
    3 D2 H  @/ r2 z8 S6 W2 C8.1.2 解决方案 281! z- _# ]1 Z0 }* ]
    8.1.3 工作原理 283
    % q& w% o$ r' h( E8.2 用@RequestMapping映射请求 293) H3 x3 l7 D, T" ?
    8.2.1 问题 2936 W: }* U; P6 \- G% }3 w! L" p
    8.2.2 解决方案 294
    ) l) S% [2 F; H8.2.3 工作原理 294
    ) [# a) E- y! r: ?* S) T: _8.3 用处理程序拦截器拦截请求 297, H# v( J! h% H. u) \* V8 z$ s
    8.3.1 问题 297
    4 N, {! _5 [/ h- O3 k0 t: o8.3.2 解决方案 298) Z) U  c% S9 u9 ]: A
    8.3.3 工作原理 298$ f- H1 M5 b4 z) b! X- S- p9 \, L
    8.4 解析用户区域 302
    # ~0 `1 V- l" {5 y  s3 u+ a8.4.1 问题 302
    ( s! A" Y# r' }8.4.2 解决方案 302# o9 j; [% r1 ~
    8.4.3 工作原理 302
    4 v- ]+ g" [/ e7 E7 @0 a8.5 外部化区分区域的文本信息 3040 J& m3 A( m& Q
    8.5.1 问题 304% |: q3 D4 |& P0 ^
    8.5.2 解决方案 3044 w8 ^7 }- i, _7 h2 O7 E  e
    8.5.3 工作原理 305& k! `& _7 c$ I+ S8 l6 W3 R5 B
    8.6 按照名称解析视图 3069 [) P" h( P- j+ a; t
    8.6.1 问题 306: m1 @. O5 T+ J. ~$ V+ [
    8.6.2 解决方案 306
    , K' f3 l) p# C& h0 [" }8.6.3 工作原理 306! l8 a3 A& y# K# i
    8.7 视图和内容协商 3098 R- n/ n% n1 S. X
    8.7.1 问题 309
    1 O6 |0 z5 K. y8.7.2 解决方案 309
    * i! }  I1 B! \4 t* Z! I! f8.7.3 工作原理 309" R( ~. w/ y3 P" B- `
    8.8 映射异常视图 312. l2 p1 D% A; a3 ^; `
    8.8.1 问题 312
    ) Y  B* z$ y5 `8 f" e! U/ E! Z. {8.8.2 解决方案 3123 D$ Z4 c$ f8 R( i  O$ @, T
    8.8.3 工作原理 312, p& Y" N/ K7 o7 B/ [2 L
    8.9 用@Value在控制器中赋值 314
    ) o* ?- t" u) K7 p" _0 M! ~8.9.1 问题 3141 P; h0 s" ~4 K; f0 G- s
    8.9.2 解决方案 3146 |" O8 H) R8 H& W) C$ t+ {( i
    8.9.3 工作原理 314
    3 z- m5 ]# q3 r) f& ^" Y8.10 用控制器处理表单 316
    ' t3 l2 U0 g8 p, N* y% V8.10.1 问题 316( F8 Y! A1 b8 F! S' I' b$ v+ f
    8.10.2 解决方案 316; Q8 I  @! @1 X
    8.10.3 工作原理 317) }  t/ W/ |! g; c
    8.11 用向导表单控制器处理多页表单 331
    2 i. Y' `5 {, Z' n8.11.1 问题 331
    + H8 j5 O% y( ^0 z& v( [+ _8.11.2 解决方案 331
    # f0 G5 _7 c# j0 |8.11.3 工作原理 3327 v4 Z4 N9 l& K5 m/ {
    8.12 使用注解(JSR-303)的Bean校验 3418 H' P3 ~/ \7 r4 {, q( \; z
    8.12.1 问题 341' K6 F8 @, {- s
    8.12.2 解决方案 342
    1 {, K, e# E- z0 D! j9 m8.12.3 工作原理 342
      K. v$ g8 r9 E0 m. e3 B8.13 创建Excel和PDF视图 344
    9 U  [3 K3 \. u- F8.13.1 问题 3447 ~0 w# p( N7 {4 q3 l/ u
    8.13.2 解决方案 345
    . y: X* j! ~5 ]6 W8.13.3 工作原理 345
      d+ Q$ m1 }7 k% [$ O8.14 小结 351* ?: {+ X/ ?8 t' k% i

    4 u8 H  Q- S7 W2 ~/ ~% C第9章 Spring REST 352
    3 e/ _/ f# n( r3 S9 H" c' G9.1 用Spring发布一个REST服务 352. b2 ?% r0 b# J7 g
    9.1.1 问题 352; [2 H: r$ r  _5 f4 d0 N
    9.1.2 解决方案 353" r$ `8 c3 }" y2 R: o' E' }
    9.1.3 工作原理 353
    / R: d+ {! }2 ?% u7 _7 Y5 X9.2 用Spring访问REST服务 358
    # k" B- @/ s( ]% y9.2.1 问题 358+ t  B1 y6 f! @+ O5 h
    9.2.2 解决方案 358
    & |* x! D8 O4 I) N9.2.3 工作原理 358
    1 b7 E$ m. o+ }/ m! p* }' w9.3 发布RSS和Atom信息源 362' x- _0 E8 u" E3 l/ q( ]; E
    9.3.1 问题 3622 I- K- Y. d7 `; O8 \
    9.3.2 解决方案 3630 l) Y8 {4 U1 k4 l7 N8 K
    9.3.3 工作原理 363/ D* U# {; S: U6 ?" ^! o0 c
    9.4 用REST服务发布JSON 372
    $ Q$ s* I! O1 P* W  e9.4.1 问题 372
    ! w! B% ?; ^/ l9 M6 a( ^; k9.4.2 解决方案 372
    0 }# C- g1 t  s  X6 [9.4.3 工作原理 372
    ( N, B1 r0 p! k1 i9.5 访问具有复杂XML响应的REST服务 375
    - @1 U& G! K& ^% p! J9.5.1 问题 375
    # ~% x* r/ N% i0 M! {1 ?9 N; [3 d& e9.5.2 解决方案 375
    . s" E! N2 ?7 g+ z. x! t5 u6 \9.5.3 工作原理 3754 a2 W2 a. z9 V. a5 w
    9.6 小结 385
    ' {) w% E& j* n$ Y" ^& `9 |& Y7 c& v5 O" W! c; B8 k! t- m1 K
    第10章 Spring和Flex 386
    & Y( M, U5 {1 i1 t10.1 Flex入门 388. Y6 @  F  }+ K. S
    10.1.1 问题 388" X0 C, H3 z6 l* u, ?6 a7 Z4 b
    10.1.2 解决方案 388, @, }/ b3 ~4 `
    10.1.3 工作原理 388
    # ~) s) x, U  i  b5 I2 A10.2 离开沙箱 3936 s' ~& H3 V! O
    10.2.1 问题 393
    $ p" T2 ^$ L: q1 v8 G: F5 f: T10.2.2 解决方案 394
    ) [( g5 i' N; y* n4 X* [10.2.3 工作原理 394
    5 y  ?# L1 a- s  ?3 V10.3 为应用添加Spring BlazeDS支持 406/ }" V! m% c& N
    10.3.1 问题 406! t- }+ `3 Z" n/ k1 v
    10.3.2 解决方案 406$ k" y+ q+ ~# n5 M: p
    10.3.3 工作原理 406
    2 T. }" ]* [9 B4 u$ w6 [10.4 通过BlazeDS/Spring暴露服务 411" {: I* x7 H5 ^. Y; O$ f# K
    10.4.1 问题 4112 J3 q* a) L7 m
    10.4.2 解决方案 411: `3 }4 |/ T  x0 a' h+ U7 d
    10.4.3 工作原理 411
    1 C- R. A9 A3 Y5 T9 F; a10.5 使用服务器端对象 418
    + c9 T& W! v2 E# h; ]3 t10.5.1 问题 418
      M9 q" A0 Q, R( u  A* D+ [' q% O# }10.5.2 解决方案 418
    6 J, z. e! G4 v/ M10.5.3 工作原理 4183 \2 u  \, K" a7 w
    10.6 使用BlazeDS和Spring消费面向消息的服务 421; p) e" x+ f! a. d1 L) ?
    10.6.1 问题 4219 V' T  \$ F3 T$ _9 y
    10.6.2 解决方案 422# Z4 T. L" j1 e! O
    10.6.3 工作原理 4220 q/ I7 q3 r9 r
    10.7 将依赖注入带给你的ActionScript客户 434, i/ r6 I3 b0 X% E
    10.7.1 问题 434
    , P- i0 e; P, j% Y10.7.2 解决方案 434
    ! t; s2 o* `7 B3 E; Z10.7.3 工作原理 435
    & J" G7 |1 G# A9 {10.8 小结 439
    / V# i5 b/ T/ A1 t$ r: `/ G/ l% ]0 s( i" x* s
    第11章 Grails 441* Z) J$ D4 }6 M& T. u* Y5 A$ A* V
    11.1 获取和安装Grails 441
    $ f/ f' @) s, z' c; d  u7 @11.1.1 问题 441
    2 e  f3 p, K; U4 g3 `' ^, P. Q) N11.1.2 解决方案 442
    0 \) u8 l& P. ?) ~2 h: Y' ~) z11.1.3 工作原理 442. Y) O  @1 I9 ~& w4 R0 J
    11.2 创建Grails应用 443+ u2 G; I2 _  \' R6 V
    11.2.1 问题 4431 j5 h* m2 T, \8 f! p
    11.2.2 解决方案 443: G9 a- R2 t1 }. u0 r$ b
    11.2.3 工作原理 443, E; V: O! d2 X# _% C0 c5 ~0 J; O
    11.3 Grails插件 447
    ' d1 V5 ?' ^9 n, ^7 K11.3.1 问题 447
    8 K0 I% M* J6 R* Z4 \) t/ k11.3.2 解决方案 448
    - O; E5 K1 e3 J/ ^2 u2 ~' }11.3.3 工作原理 448
    5 ^% j( M& c3 V11.4 在Grails环境中开发、生产和测试 449
    4 @0 p( j( [9 n1 s/ b11.4.1 问题 449- y- A/ g( D$ }8 ]
    11.4.2 解决方案 449" ~- e# W5 D8 _# d9 k- h
    11.4.3 工作原理 4508 C, s+ d, U* n* Y7 W* Z
    11.5 创建应用的领域类 452
    & O( D, {/ j4 y2 q* a5 e" |4 P' M4 m11.5.1 问题 4522 P  }6 x7 K% [6 e. g
    11.5.2 解决方案 452: P7 D  E3 v1 s$ i; W$ }/ y
    11.5.3 工作原理 452
    : k5 J- M. b" }3 z" R8 h11.6 为一个应用的领域类生成CRUD控制器和视图 454: w/ z1 x+ y- g" ?9 W
    11.6.1 问题 454
      N: m" y# G4 w11.6.2 解决方案 454* E& v# W6 |! r8 C  P' C) D$ L1 L
    11.6.3 工作原理 4554 V5 P" i8 v" m4 M# k& y$ D( J
    11.7 国际化(I18n)信息属性 458" h1 L3 e( `7 i' r
    11.7.1 问题 4583 G4 w. v- c3 p% ^, s
    11.7.2 解决方案 4586 K3 g' \9 S; |7 p
    11.7.3 工作原理 458
    7 o: Z0 ^/ ^( Q3 Y- t11.8 改变永久性存储系统 461
    8 v. k2 D* p( U. i2 o: t3 E11.8.1 问题 461
    4 F/ T; F! F! e  A: ~11.8.2 解决方案 461+ E* [% k4 a0 |1 ~' h
    11.4.3 工作原理 461- T# F( W" n, X' }/ l
    11.9 日志 464' |) I3 v+ B9 C5 T! }. ^
    11.9.1 问题 464
    " I  z+ c5 k& p/ b) q* I6 Y+ D. F* U11.9.2 解决方案 464
    0 `* e" L) |$ l6 p11.9.3 工作原理 464. d: a, T/ z0 T  {& R! j
    11.10 运行单元和集成测试 466
    3 t# @  w0 Y0 d& J/ D3 G11.10.1 问题 466
    % f/ m3 ~8 P7 q11.10.2 解决方案 467) V/ ~% ^# j1 @8 _% j
    11.10.3 工作原理 467
    5 d" A" e! I, ]2 K. M. F11.11 使用自定义布局和模板 472% }5 q* d/ i, Q% T7 ?! D
    11.11.1 问题 472
    7 x+ }8 O) M. o( F11.11.2 解决方案 472
    ' _0 E. b& L, B$ ~( X9 E& r' Q11.11.3 工作原理 472
    ) y" a+ u! _5 f- M; P! g: X7 f3 p11.12 使用GORM查询 475
    : i; {6 P! s4 Z- d: |8 @( N7 [11.12.1 问题 475  F, S9 h$ B% Q% G6 ~9 {/ |2 K
    11.12.2 解决方案 475
      }8 L3 q3 o* a1 \7 D9 N. W8 {11.12.3 工作原理 475
    ( i; w' t+ A5 e11.13 创建自定义标记 477
    2 }# F1 \5 O/ c2 m6 Y% M! a  b11.13.1 问题 4771 W) k2 U) h! R: ~& }
    11.13.2 解决方案 4778 x# P/ ?9 v) `2 ~
    11.13.3 工作原理 478
    7 ^# \0 ^$ t8 l' a0 R& g9 y11.14 小结 479( r  i2 a6 G) T7 u$ x- Y
    ) ]. b/ {% T* K  x% d. l
    第12章 Spring Roo 481
    . ~9 U- D* W0 B) K3 T# a12.1 设置Spring Roo开发环境 4834 X- [7 P3 R  N4 u$ q5 t/ Q% L
    12.1.1 问题 483
    ! h9 D" b$ L- k' N, _7 f12.1.2 解决方案 483
    / C* a- {+ q! j; O12.1.3 工作原理 483( ~; T7 P0 a) a  }' T# e
    12.2 创建第一个Spring Roo项目 486
    / @4 u& W7 K4 X" C# S/ ?12.2.1 问题 486
    , b; z" [$ G7 F7 ~* @6 {" S12.2.2 解决方案 486
    9 U- ]) }1 l; _4 Y% c0 ^12.2.3 工作原理 486. L* o* |% }) ?2 @5 |1 c
    12.3 把现有项目导入SpringSource Tool Suite 491; y9 W/ F4 W( P9 t/ p" h/ S3 {
    12.3.1 问题 4911 ]( e" F/ l$ @* ^& J
    12.3.2 解决方案 492# U5 f3 ^; q* V9 H( K' p& \
    12.3.3 工作原理 492
    6 u, ~. ?5 X7 c$ Y' P: \12.4 更快地构建更好的应用程序 4936 U9 Y, H/ M( p) f
    12.4.1 问题 493* B' a# r/ Y" y3 J6 O
    12.4.2 解决方案 494
    , F! a0 f2 N/ u; S* N% }12.4.3 工作原理 494
    ( k* w+ O% {4 p: B1 D* a12.5 从项目中删除Spring Roo 500+ B* C+ n6 `- j% S6 a
    12.5.1 问题 5002 S- B% [1 @/ U7 h+ W) k0 U% q
    12.5.2 解决方案 500/ J2 B  F4 a9 D0 S- L
    12.5.3 工作原理 501
    , P5 u' A4 v0 _: s1 W  h7 ~! c12.6 小结 502
    , M' y' K1 @' c6 [% A% @1 [2 a
    5 r/ A$ e4 }$ S( p9 H第13章 Spring测试 503' U+ S6 I) @/ a( o
    13.1 用JUnit and TestNG创建测试 504  G* ?4 b  \: W/ V4 |  k+ {! M
    13.1.1 问题 504+ i, V. I& x- C$ ^
    13.1.2 解决方案 504! T6 r& h6 e' Y
    13.1.3 工作原理 504& g) B8 M9 I1 L' Y3 V
    13.2 创建单元测试和集成测试 509
    7 G1 O  T/ _% z' ^; M9 Z13.2.1 问题 509
    - ?" O6 H  B  A8 c4 d13.2.2 解决方案 509
    $ Z" T1 Q; L9 s) k13.2.3 工作原理 510
    $ j! _& N9 t4 N13.3 Spring MVC控制器的单元测试 518
    ! T' [3 p9 _2 b1 J13.3.1 问题 518
    8 l3 q9 W+ f  r( k' ~0 M13.3.2 解决方案 518
    ! l3 p( f# L' g5 K: g13.3.3 工作原理 518" t  G6 |, I0 g0 O! o, {
    13.4 管理集成测试中的应用上下文 520# y0 F6 N: j6 r% T  h! Y
    13.4.1 问题 520
    + t( s9 g+ H$ Z6 m/ Q. x; {. B) y13.4.2 解决方案 520$ N- \) Y5 C7 S7 E' V2 N) K" |: y
    13.4.3 工作原理 521
    9 W1 F# y9 r/ E5 u  \2 X4 o13.5 向集成测试注入测试夹具 526" E6 f4 i; [& D( d
    13.5.1 问题 5267 z' H- v* l1 N7 ~: X8 {+ ~
    13.5.2 解决方案 526
    3 Z. s( Q5 d( V1 a! N2 W3 B13.5.3 工作原理 527+ I! B3 g+ ^6 R$ P! \8 M9 [
    13.6 管理集成测试中的事务 530
    2 I7 _5 D, v6 L3 f! k13.6.1 问题 530
      I$ I8 V8 Q/ f3 h) _: x13.6.2 解决方案 530% U$ G$ l4 R( Q4 ^% s
    13.6.3 工作原理 531
    7 W  }% ?4 i) T  s13.7 在集成测试中访问数据库 536. o- q5 [1 l0 _" u$ l; X
    13.7.1 问题 5366 f+ _* n/ h6 D
    13.7.2 解决方案 536
      x, M# M% X; Q  V: m) C, }  o13.7.3 工作原理 537
    9 Q7 b% j2 g; o0 D# i% i13.8 使用Spring的常用测试注解 540
    4 ^: {* V6 O3 d; s0 c1 O8 n% O13.8.1 问题 540. H+ d+ h# X# H0 o, ?1 j
    13.8.2 解决方案 540
    ! K8 a# w* R" Y13.8.3 工作原理 541/ o! m1 [# h+ G. u+ ?
    13.9 小结 542
    & M, W" F5 {" B! h& R
    ' R' n' K! n) i& k7 x第14章 Spring Portlet MVC框架 544- ^  O  A8 i8 h' N2 ~
    14.1 用Spring Portlet MVC开发一个简单的Portlet 544. d+ T- O8 K. |2 o: n* M* z/ r
    14.1.1 问题 5443 U1 e. y, C: U5 D/ \9 n
    14.1.2 解决方案 545, L+ f6 [( _. w" o2 D
    14.1.3 工作原理 5466 I* [8 L& D$ ?/ b1 y6 g+ B7 Y/ I' b
    14.2 将Portlet请求映射到处理程序 553
    6 R2 ^3 k/ o# l& F- l14.2.1 问题 553- K7 H+ i) c* X- ^
    14.2.2 解决方案 553
    2 v) y$ ?: u' @14.2.3 工作原理 554
    " h5 e  G5 O- j14.3 用简单的表单控制器处理portlet表单 561
    ! @" h. S+ f1 c6 ~. R3 k14.3.1 问题 561$ `; P6 m9 @5 Z! o$ c
    14.3.2 解决方案 561
    ' b( p' A% B) J5 f14.3.3 工作原理 5613 B3 t# d6 p. s) f9 u5 E# r
    14.4 小结 569/ m- d4 k4 g8 }& r
    0 A: x- n( O2 u0 N4 w* c
    第15章 数据访问 570
    8 p8 d9 H, j' ?3 R2 g15.1 Direct JDBC的问题 5711 P/ A: [* l7 F3 m8 i' H
    15.1.1 建立应用数据库 571
    , J8 E$ F: v, ]  _15.1.2 理解数据访问对象设计模式 573
    0 @6 Z' o4 S/ Z+ ^15.1.3 用JDBC实现DAO 5734 m5 P! V9 k5 U& C, H; [$ E
    15.1.4 在Spring中配置数据源 575+ K& O8 Y$ `. T
    15.1.5 运行DAO 577
    ' C" V0 q8 `: G3 R% x2 k9 Y; ]15.1.6 更进一步 577: _5 M* i/ R" }7 g5 ^* X* Y& y
    15.2 使用JDBC模板更新数据库 5783 g3 @) L9 C6 J( x3 h: I; H# }
    15.2.1 问题 578* t! h' j. D$ H5 c: }' c. q& \$ E
    15.2.2 解决方案 578
    : i; ]0 p' `  M5 K9 _15.2.3 工作原理 578# T( r1 t7 K1 U; S! ?
    15.3 使用JDBC模板查询数据库 583+ `( t2 d/ N1 d  Q( ~
    15.3.1 问题 583
    : k% I6 q) h. W3 ?15.3.2 解决方案 583
    + a. M* H. I4 X* a% Q7 l% N/ Z: F15.3.3 工作原理 583
    6 D, X' r3 i# D# R' J15.4 简化JDBC模板创建 588
    " @- @$ M) J. z- A+ |  b1 r; |' G15.4.1 问题 588: O! `6 Y$ d5 l' ^
    15.4.2 解决方案 588
    8 o. I5 D5 l/ ?6 N. K15.4.3 工作原理 5895 D9 _5 k/ e! W6 X
    15.5 在Java 1.5中使用简单的JDBC模板 591" `! @, ?, a' I+ P) i) m
    15.5.1 问题 591
    $ W* f9 F+ J" r2 y0 ^$ Y$ M15.5.2 解决方案 591& N, n/ R+ F# u0 u, l5 \  l5 B
    15.5.3 工作原理 591
    6 m; Y6 S5 Y) m+ i. \) H2 w  }5 |* B15.6 在JDBC模板中使用命名参数 595( x& I6 l2 ^1 h4 d% t& L9 T
    15.6.1 问题 5952 \, g( d8 d: |7 g' W% U
    15.6.2 解决方案 595) f" F. ?/ t: r- v5 s
    15.6.3 工作原理 595
    5 z& _+ Z. U) j7 S2 F1 w  {15.7 在Spring JDBC框架中处理异常 597" |" M& H  d4 T, }- \) d% U+ C
    15.7.1 问题 5974 p5 u( O+ L- @, H
    15.7.2 解决方案 5973 g2 `* g! J8 U( S# v: i5 K
    15.7.3 工作原理 598
    - S7 e: Y* ]* i5 @% Q15.8 直接使用ORM框架的问题 602  F7 ^5 w9 G# w+ a4 K9 `
    15.8.1 问题 602
    " S4 W0 M0 q2 e5 D7 ~6 I0 ~7 M15.8.2 解决方案 6031 V9 h2 U: l+ t3 Z; o1 q
    15.8.3 工作原理 603
    2 |+ C* g0 g; b1 B- W" R15.8.4 使用Hibernate API,用Hibernate XML映射持续化对象 604
    . E: t$ ^( P# v5 s& v* k15.8.5 使用Hibernate API,以JPA注解持续化对象 6087 Q; k( c& T$ ^
    15.8.6 使用JPA,以Hibernate为引擎持续化对象 610: p0 S5 u9 |* f5 a7 q9 S( f
    15.9 在Spring中配置ORM资源工厂 613. \& D/ q/ |* \: C5 t
    15.9.1 问题 613
    0 T( ]: Q  |) @0 W7 o15.9.2 解决方案 614  ]8 M' h# [/ ~
    15.9.3 工作原理 614
    8 N/ T* i8 u: [+ ~15.10 用Spring ORM模板持续化对象 620# s( q9 H- Q' t/ v" P
    15.10.1 问题 6205 I5 O. j" O" W
    15.10.2 解决方案 620) m0 X) r0 [& t8 |7 ]
    15.10.3 工作原理 621
    4 t9 }5 n/ }+ F4 G( g+ y15.11 用Hibernate的上下文会话持续化对象 6264 o* {2 M2 F$ }2 r* R  P$ A5 X
    15.11.1 问题 626  l& z& t# n7 u- B* y* A9 T/ t7 S
    15.11.2 解决方案 626
    - c7 a* a+ y+ L2 C2 l% L15.11.3 工作原理 626$ C) {1 m$ W9 w0 P+ y
    15.12 用JPA的上下文注入持续化对象 629$ [+ f* G( V# V
    15.12.1 问题 6292 K8 S  @! r& v5 H! q
    15.12.2 解决方案 629
    : v" L$ j4 o2 |* @8 _, c15.12.3 工作原理 630
    9 T/ j( T  z6 n& x: d' F15.13 小结 632
    , j" p: u0 y; {  e& {
      K! Q- o1 C0 w8 Y& K9 f# ~7 Y第16章 Spring中的事务管理 634% L7 s; J' H1 q# O0 N# M; y
    16.1 事务管理的问题 635
    $ W; f9 H$ ?8 c16.2 选择一个事务管理器实现 641
    + {- n1 L5 ]8 s8 v( c% ~9 |16.2.1 问题 641
    7 b3 a' _' X7 ?8 Y9 X16.2.2 解决方案 641: y% d# r1 t7 U( c. y; h
    16.2.3 工作原理 641  I( F' C) X/ \9 y/ r. ~: B9 t
    16.3 用事务管理器API编程管理事务 642% V4 j! J( T& U. p! e6 e) z9 c
    16.3.1 问题 642
    & f5 F$ y6 w8 M* G( m$ C+ p16.3.2 解决方案 643
    $ r) f1 |5 [$ K16.3.3 工作原理 643
    4 n" A8 n  K% F$ F( @16.4 用事务模板编程管理事务 6447 C- y' E/ d5 A1 e: y8 ?+ |
    16.4.1 问题 644
    : M" M2 P% F8 k! X- h4 i16.4.2 解决方案 645
    : S# a; q6 Y) j/ h/ L  F( v16.4.3 工作原理 6457 s) a. Q0 e8 e  G$ S. x
    16.5 用事务通知声明式地管理事务 6472 e$ v. r3 k4 x) S; O  J
    16.5.1 问题 6477 j$ h2 W6 C6 u- u" o, a
    16.5.2 解决方案 648" W- A3 Q0 U$ l2 ]4 A. b
    16.5.3 工作原理 648
    1 {) x3 f; P$ }; B8 p* a$ u16.6 用@Transactional注解声明式地管理事务 650
    3 l, G. n8 f. `: }" o5 J/ i16.6.1 方法 650
    / H: `& T! I- t3 R9 Q/ Z16.6.2 解决方案 650
    ( s; j) i6 W5 r/ E16.6.3 工作原理 650% \3 V1 |( ~8 G  Z
    16.7 设置事务传播属性 652. W" Y7 k* \, C. }. ]2 e  }
    16.7.1 问题 652& l" A8 |7 [+ X- F' O5 l5 E6 Q
    16.7.2 解决方案 6525 Z5 H# |5 L6 n, F( x3 W2 i2 Z
    16.7.3 工作原理 653
    8 P2 w6 g, A* J2 @# r0 t' w$ `( i16.8 设置隔离事务属性 657: m* m4 ^# R# {/ E- u
    16.8.1 问题 657! Y8 M: |, s& R7 v# y% R$ _
    16.8.2 解决方案 657' t) g0 H8 x8 r  I
    16.8.3 工作原理 6585 Z2 e1 L) i$ T0 L% ^5 |* Y! F
    16.9 设置Rollback事务属性 6644 K  W- |9 j, C
    16.9.1 问题 6642 D, K6 Y6 u4 S  Y
    16.9.2 解决方案 664' w# ^* n! I: @  B2 _+ v) `. X
    16.9.3 工作原理 664
    ; ]* c0 G+ j# I- u# y  g7 R16.10 设置超时和只读事务属性 666
    $ X4 Z( D' k. E2 z( H1 z( c16.10.1 问题 666
    * u  @0 d1 G; n* \% f3 k16.10.2 解决方案 666- o5 R7 {! k# e/ O4 `
    16.10.3 工作原理 666: v" l6 I# U1 F9 V) b# ~
    16.11 用加载时织入管理事务 667
    5 v$ x& Q/ l  h16.11.1 问题 667
    5 S7 g0 v$ P8 z; L16.11.2 解决方案 667
    ' m+ Z! R% L; Q3 ]16.11.3 工作原理 667( i1 W, X6 C6 `( q. k8 i
    16.12 小结 671. _7 m9 a% N. u: \& P

    * ~0 S8 v& @+ y' X0 ]5 p第17章 EJB、Spring Remoting和Web服务 672
    2 z- P% r# q; W! d( k+ h17.1 通过RMI暴露和调用服务 672
    * }1 H! M! G7 ?2 L8 ^" R17.1.1 问题 6720 x4 U9 }/ g3 V2 t
    17.1.2 解决方案 673
    7 [4 X% p7 o: ]( i% w& X17.1.3 工作原理 673
    7 L5 K: |: Y9 \! _17.2 用Spring创建EJB 2.x组件 676) F. L* F* R9 H( X
    17.2.1 问题 676
    $ L& x- x. V- M  _, [17.2.2 解决方案 6777 _/ r: B5 {; N0 ?$ `2 e
    17.2.3 工作原理 677
    3 b& U3 Z, N8 V, `; i9 `/ ?17.3 在Spring中访问遗留的EJB 2.x组件 683+ K" Y7 r# I- D) e
    17.3.1 问题 683
    ) b! j: P% P6 z" K$ q+ o$ G17.3.2 解决方案 683+ }* B: x# b* J2 s/ R. }$ ]$ h
    17.3.3 工作原理 684
    + |6 @" v" R3 ?- v9 m3 C: M; g17.4 在Spring中创建EJB 3.0组件 687
    ( i9 a/ P4 f' Q5 B8 O4 a9 Y3 z0 U17.4.1 问题 687
    + T3 n) a" I8 {- E2 {17.4.2 解决方案 687
    : J) l2 u1 V6 d& ~  v+ q17.4.3 工作原理 688
    8 q- L8 t5 b( w9 u8 C' K4 h17.5 在Spring中访问EJB 3.0组件 6898 z$ G; v$ \6 w; X" d, s( B! X. n
    17.5.1 问题 689+ y8 C2 Z2 N2 P2 Z. F8 G* A3 G7 C
    17.5.2 解决方案 690
    * o. I  t* o' B5 N) I1 ]; C17.5.3 工作原理 6904 a: d: y2 U* |! L
    17.6 通过HTTP暴露和调用服务 692) f- R2 B" [% Y
    17.6.1 问题 692# t% D  h3 L) u: u$ t" W
    17.6.2 解决方案 692- J) v) T: |2 H# u' o
    17.6.3 工作原理 692% p6 U2 B; O8 _$ A6 h. s' {
    17.7 选择SOAP Web服务开发方法 696! o- l1 ]" Q& i0 y
    17.7.1 问题 6968 l- [9 i& ~. z+ I" C
    17.7.2 解决方案 696
    , H! y1 W5 ~/ y17.7.3 工作原理 6960 [( @7 A  o+ F  {  h
    17.8 使用JAX-WS暴露和调用Contract-Last SOAP Web服务 6988 e2 H  o) o) K7 K* c& {% F
    17.8.1 问题 698- h& j* ?( s: j0 v6 P) R4 t
    17.8.2 解决方案 698
    ' Z8 w$ W4 K1 k9 t! d, ]; |2 G17.8.3 工作原理 698
    ( l: u3 M' y' k! A17.9 定义Web服务契约 705- ~) x7 h: t  B
    17.9.1 问题 705' Y3 U  u) c+ f# r( |* Z
    17.9.2 解决方案 7051 A" D) Q* i( S2 s: A
    17.9.3 工作原理 7051 H% U/ ]. ^; [* R
    17.10 使用Spring-WS实现Web服务 709* I' P/ _) G, b: z/ P4 P9 c5 E4 s& T  x
    17.10.1 问题 709
    * g6 L$ h  x' l* X$ k0 Q- B17.10.2 解决方案 709
    & _4 v: S1 T/ ]$ `17.10.3 工作原理 710
    ( K9 [* b# g3 V& P# E; N6 F17.11 使用Spring-WS调用Web服务 715. J8 w$ U+ }; z0 v6 @! Z- Q3 M5 r7 T& I
    17.11.1 问题 715
    . v  t9 }; ^' ^* M/ h7 G; i9 m4 _' f17.11.2 解决方案 715
    ! f6 p2 q7 w' }17.11.3 工作原理 715" W2 |5 r5 I: ?8 n* V! q
    17.12 用XML编组开发Web服务 719, E# @: K4 Q  y& _, b
    17.12.1 问题 719
    . o: Z* F$ B& n3 |, U17.12.2 解决方案 719
    5 l8 b' n4 y! l17.12.3 工作原理 7202 o2 ^+ T* |9 Q3 P! s0 s
    17.13 用注解创建服务端点 724
    ; n0 S  O5 E8 E% z1 {17.13.1 问题 724: k+ {: o2 }: r) K; ?* j
    17.13.2 解决方案 725
    ) k. u. Y8 `% L6 t" I17.13.3 工作原理 725
    * c: b9 A7 E4 a1 _8 I' q+ f& Y6 I! c17.14 小结 726
    1 T/ f: P) N# ^9 g; [) D, q) N( _* ]5 D0 a& H+ m
    第18章 企业中的Spring 727
    4 I. r1 Z& g2 j18.1 将Spring Bean输出为JMX MBean 727
    ) s! j5 u& `3 q2 O8 H' D18.1.1 问题 727' \9 g0 h0 a! _
    18.1.2 解决方案 728
    # s/ C! E+ f9 W1 Q18.1.3 工作原理 728
    / e! r& x! x6 a: C, c& T18.2 发布和监听JMX通知 740
    , {( ^8 R$ V2 `18.2.1 问题 740
    2 l* A" H4 {0 h& |/ @18.2.2 解决方案 740
    . M; d$ r+ L/ S18.2.3 工作原理 740) o4 ^$ c0 `' Q" Q8 j( a& \) T
    18.3 在Spring中访问远程JMX MBean 742
    , {, Y. Y& P* h& ]18.3.1 问题 7425 ?+ M5 d& V. F+ P" W, C! Q
    18.3.2 解决方案 742
    2 e& C  k5 Z7 k1 Q! _3 F18.3.3 工作原理 742
    , t, K7 _' e. F18.4 用Spring电子邮件支持发送邮件 745
    - h5 a% `7 |6 e! i2 ~7 o18.4.1 问题 7457 g) ^- @# K2 `. ?& q
    18.4.2 解决方案 745
    $ x9 J& }5 M9 Q- M2 y: ~9 H8 t18.4.3 工作原理 746% N4 j" w# x3 c5 m+ t4 F
    18.5 用Spring的Quartz支持进行调度 753
    . u4 @) R$ [  [- W+ J5 |' \8 p% p: H18.5.1 问题 7530 x7 \* q0 h- N* w; q1 ^& [0 q
    18.5.2 解决方案 753
      V) R' i5 J6 i18.5.3 工作原理 753/ J) T( \' ?5 C/ G7 H. F. B6 e
    18.6 用Spring 3.0的调度命名空间进行调度 758/ J+ X0 A8 Z% w
    18.6.1 问题 758
    ; m$ K2 K5 U* h5 o18.6.2 解决方案 758
    + O( a& b% z' c! A; e6 ~  ^4 r18.6.3 工作原理 7584 Z+ }7 P* y3 H$ L8 ]9 `
    18.7 小结 762' f8 I; w  [8 G$ j) Y: ~, I  C: k+ @
    , q6 P8 J9 A3 Y" `* r
    第19章 消息 763: _2 r3 G' Y$ u% A$ u5 m$ C) v
    19.1 用Spring发送和接收JMS消息 764
    " j# {' N. k* v% f5 j19.1.1 问题 764! i0 G- @3 d; H% U; @* N
    19.1.2 解决方案 765
    & `, ?2 x5 \9 K6 i, V& a2 d( `) w$ B19.1.3 工作原理 765
    ! H/ F- Q) L, c/ `- W% K3 c% @! e( f19.2 转换JMS消息 776
    % p+ @, t+ L7 Q9 ]5 b) w- v19.2.1 问题 776
    # l( Y% i- E( y: j: z' q' m" A19.2.2 解决方案 776
    , ^. F& f( _# {. @/ P19.2.3 方法 776
    ' O' ?6 d9 o0 j5 Z- a9 A1 g19.3 管理JMS事务 778
    % O0 G9 r( R3 c& `9 g9 f, l19.3.1 问题 7786 Z3 h0 P" z' S
    19.3.2 方法 779& K2 B2 q" W3 t& I0 G2 R
    19.3.3 解决方案 779
    7 s0 l* ^% D. P" i0 U, b19.4 在Spring中创建消息驱动POJO 780
    # G/ O/ c4 u5 [. X) x' m19.4.1 问题 7805 l) \: n8 }7 L2 t. i+ G
    19.4.2 解决方案 780! ]$ p: u+ j/ d9 w- m3 ^3 S% B
    19.4.3 工作原理 781
    " z- l4 ~( E. _5 C/ T; X% p- Q19.5 建立连接 786$ `8 i" a# w3 U; i! N1 Q. w- T+ r
    19.5.1 问题 786
    ; B& z3 Q9 `4 G9 r/ u19.5.2 解决方案 787
    $ ]4 Y* f$ O  R19.5.3 工作原理 787
    9 ?7 y. r' h; S19.6 小结 788
    % D9 q* Y9 B5 J3 R# G
    ( q' U7 i" |% F1 Q第20章 Spring Integration 7896 f  r: D: W1 f0 x, q
    20.1 用EAI集成一个系统到另一个系统 790
    # I2 R( w4 g! E0 I, E& U/ ~20.1.1 问题 790# k5 ^4 ^: }% t& [5 Z* H
    20.1.2 解决方案 7907 ~' S" t) T" ]8 @$ s& ]
    20.1.3 工作原理 7908 ~- _/ L6 C& D( _- s
    20.2 使用JMS集成两个系统 793
    : T+ B4 d" p, R1 x  n20.2.1 问题 793
    $ ?: z; h* W+ P- H9 I20.2.2 解决方案 793
    2 t* R. w" z! \) _) S7 Q; V20.2.3 工作原理 793) P4 O8 ]# A; Z* G1 U9 ]# @# k
    20.3 查询Spring Integration消息得到上下文信息 797
    " q! o  C' v7 L' l7 B2 Q* E% M; o20.3.1 问题 797
    % B2 r# L: {' k- x3 D  D7 c20.3.2 解决方案 797
    ( a  l6 ?1 ~: @, |20.3.3 工作原理 797, \" a% L0 q3 f
    20.4 用一个文件系统集成两个系统 800. a. N% y' E& z" L# ]# X; s. D
    20.4.1 问题 800" J- }7 Q4 g. A8 ~# X
    20.4.2 解决方案 8008 v$ A  j$ M5 p! S5 s+ q% p
    20.4.3 工作原理 8009 k9 T- ^6 p* [7 B
    20.5 将消息从一种类型转换为另一种类型 802; B# P0 C1 a: T
    20.5.1 问题 802
    : U" d) c9 M; k8 i: M20.5.2 解决方案 8025 w1 R/ _' t+ K8 }. k
    20.5.3 工作原理 803
    2 U. o' ]3 W1 F# y( N7 {+ ]20.6 使用Spring Integration进行错误处理 806" }# y9 N( a6 `6 l! K
    20.6.1 问题 806
    * C) E# `/ P) Y; F( S20.6.2 解决方案 806
    * h: B7 U4 T7 A20.6.3 工作原理 806
    + o6 Z( W- z+ t& B0 `2 T20.7 集成控制分支:分解器和聚合器 809+ T  G. V6 t( {/ V
    20.7.1 问题 8097 S0 |/ S& L( }+ v$ @
    20.7.2 解决方案 809
    ( U1 F9 F0 t$ l# i20.7.3 工作原理 809+ x3 [: Q! m( ~5 b0 \4 X
    20.8 用路由器实现条件路由 8135 E7 s7 C8 O$ V5 i! L
    20.8.1 问题 813* i3 A' p# w9 \' V4 V
    20.8.2 解决方案 813" `. ~: _5 F! _. k  j
    20.8.3 工作原理 813: O% E) B$ E& w( c8 j
    20.9 使外部系统适应总线 814
      g, R# y$ q2 j: Y20.9.1 问题 8141 E2 U3 o- U0 ^  m
    20.9.2 解决方案 814
    8 E+ t( _% z3 _8 K+ ]20.9.3 工作原理 814/ q! v; x& ^+ v4 k  E2 j
    20.10 用Spring Batch产生事件 825
    3 t5 \2 u2 D8 T7 m7 S1 ]: D0 A20.10.1 问题 825& {" y6 w" D' b" `
    20.10.2 解决方案 825. i/ U' x' S+ x& c0 Y6 V' Y
    20.10.3 工作原理 825' l5 |1 K1 o* ]4 Q6 U
    20.11 使用网关 826
    $ @0 l2 Z2 u5 M5 P- W2 H6 e! |20.11.1 问题 826- ^5 ^  S1 e! a2 c3 A$ @- p; V( J
    20.11.2 解决方案 826
    . o2 x( c7 ?& P, _20.11.3 工作原理 827
    ' g7 W1 M+ y% g20.12 小结 832/ H7 V- C8 I/ z

    ) N% Z) k) H( p0 a: A6 Y; f第21章 Spring Batch 834
    4 U& b2 S' p$ Q* p7 p. _21.1 建立Spring Batch的基础架构 836
    1 ^! @& k' L! B8 k21.1.1 问题 836
    7 A0 L6 ]. V8 a5 r2 u21.1.2 解决方案 836
    # {. d/ u) q/ N21.1.3 工作原理 837. O4 @9 U6 n% w, v/ {$ L
    21.2 读取和写入(无计算) 8399 |: Q# P- V  w. j1 O7 p
    21.2.1 问题 839( A4 A7 P2 T% i( ^2 a
    21.2.2 解决方案 839: x* v% f2 J7 ?1 S7 w: o9 n
    21.2.3 工作原理 8407 z" R4 M* e; f& N/ a% s& p
    21.3 编写自定义ItemWriter和ItemReader 844
    ) m' K5 ~+ [$ V2 |* k21.3.1 问题 844
    * S  E% C/ G* Q21.3.2 解决方案 844' m/ K/ F7 s5 L* u# z0 [, i
    21.3.3 工作原理 8447 ]4 L% B3 L, a" ~5 n
    21.4 在写入前处理输入 847
    5 ~+ L2 D6 P4 ~4 \, F21.4.1 问题 847% W; Q3 p/ `7 J5 q7 i) l/ V
    21.4.2 解决方案 8471 x! h) r2 Y$ Z0 p: S& P: ?
    21.4.3 工作原理 847- g- Y+ \8 w' G- k
    21.5 通过事务改善生活 850" L) |1 P7 |+ i8 J/ K! }
    21.5.1 问题 8507 `! }% [* X2 u7 a
    21.5.2 解决方案 850
    ; f! E& s% H! ~+ {2 {2 z  v, Y& _1 g21.5.3 工作原理 850
    ' o2 x3 ?: Y, V7 i) D21.6 重试 8521 L7 k* }7 K8 u; @. W
    21.6.1 问题 852! s2 B/ U) a! o
    21.6.2 解决方案 852% K# S# b& D0 r' d" ^) O
    21.6.3 工作原理 852: i0 u' h( x* W0 q- s' q2 l7 `
    21.7 控制步骤异常 855
    $ I4 Z% a$ A1 N; G8 d1 i21.7.1 问题 855" A- u! H- p4 Z" ]$ A
    21.7.2 解决方案 856; h2 R+ B# B" g/ g5 `$ x, ~
    21.7.3 工作原理 8564 D- u1 e+ T8 K! M
    21.8 启动一个作业 860
    4 m! i5 r8 Q; J9 a$ g4 H7 {21.8.1 问题 860, V$ |( s" O$ b( _( ?& V1 f
    21.8.2 解决方案 860* ^" p0 q+ r, g' g. w1 w
    21.8.3 工作原理 8604 N; q. H) x; E8 }3 v3 g
    21.9 参数化一个作业 8646 @3 h2 t' Y" o
    21.9.1 问题 864
    . o2 {% u, Y, B# ~  R) d21.9.2 解决方案 864
    ( ~) Y9 l6 c8 j( r! D& J; o2 K; ?21.9.3 工作原理 864
    3 p* p$ a' M, s& o, e21.10 小结 866$ {# Z2 O7 a# r" E
    . G2 I; j: c8 Z7 A" O- \
    第22章 网格上的Spring 867
    9 S- k# v. T' O5 n22.1 使用Terracotta聚合对象状态 869. ], b! v, E/ R; p. C$ R% q
    22.1.1 问题 869" ]- L3 C# T3 o. g: C/ f1 z& Z
    22.1.2 解决方案 869/ c6 D3 M* Y' I: I  g" @+ B2 ]. g# Q
    22.1.3 工作原理 869# z9 D- R2 {, R, a7 z1 b
    22.2 将执行分布到网格上 879
    * V1 T# e9 v6 l0 H22.2.1 问题 879
    $ e7 B' j/ V1 u8 A, y% J22.2.2 解决方案 879# ]0 \- [# U" x8 o1 Z! p8 l
    22.2.3 方法 879
    - U- l* f/ E" i- k5 X22.3 方法的负载平衡 880# S8 I# |: K' O. N
    22.3.1 问题 8806 \% `6 x- V" h9 I. d2 B4 s0 R! Y% l
    22.3.2 解决方案 881
    # y- p0 T  S, G) q0 ^22.3.3 方法 881
      r! k: I! i4 }# y' V% m0 R0 t22.4 并行处理 884( n0 u* t" m: b  X: D
    22.4.1 问题 884
    1 O# h1 ?) A4 S3 v! E22.4.2 解决方案 885  c! J- ?3 e7 H
    22.4.3 方法 885
    8 p- n. ~5 k! r! R2 T" @2 b22.5 在GridGain上部署 887
    1 L! N+ @3 }5 R22.5.1 问题 887  Z" H( c) l9 g  a1 \3 ^, X
    22.5.2 解决方案 887
    3 J9 o: \$ \1 [22.5.3 工作原理 887
    8 X" b0 B) D# @3 J22.6 小结 891
    * T! r( c8 ^' r) W; _8 N$ q7 [, b/ r) c
    第23章 jBPM和Spring 893
    $ g- Y' H7 m. }  r5 e! Q0 E& F; ^软件过程 894* T; `1 |1 U* O9 D8 c
    23.1 理解工作流模型 896( A2 C$ F2 ^' e
    23.1.1 问题 896
    / d$ T% }5 W9 h- ~: w" O. m- q23.1.2 解决方案 897
    5 g- f, v2 J$ @5 z: Z, x% a) X23.1.3 工作原理 8974 Z. b  h6 W0 e. f
    23.2 安装jBPM 898
    - ^" s5 V0 a7 A" F4 j23.2.1 问题 898
    4 W6 [; a* z7 Z9 f5 j23.2.2 解决方案 898
    : y! \; y5 f7 k0 W9 D* c0 u23.2.3 工作原理 898
    9 J, X- X4 M4 N5 w% h" q2 B* c4 k23.3 将jBPM4与Spring整合 900
    # O4 p0 \, n3 ~. d23.3.1 问题 900
    4 Q/ w! `) \3 c/ D4 |) f4 i; k23.3.2 解决方案 9007 o! a( w! ]" e* ?
    23.3.3 工作原理 9006 W  k) `- f. L2 p' p* T7 B
    23.4 用Spring构建一个服务 906
    / L# Z) c+ w/ a: ]" f( h9 G* {: T6 g23.4.1 问题 9067 t  h& U, C" l* x
    23.4.2 解决方案 906
    9 B+ W1 \7 y- b- H23.4.3 工作原理 907
    2 k+ f; B8 z7 W# h23.5 构建业务过程 9104 J2 d& G% x" ^7 x9 H$ E
    23.5.1 问题 910
    . I; H1 n7 K9 J: q# r6 E23.5.2 解决方案 9103 G3 v+ q* a. g; g" f
    23.5.3 工作原理 910* l/ @5 }6 w9 f7 W$ R* V
    23.6 小结 913, r; \6 i% b' f* M/ @
    & J, l  z9 [2 X5 {
    第24章 OSGi和Spring 914/ M' Q* |- T9 a( G3 S: ~
    24.1 OSGi入门 915
    " M3 f4 R+ Z% M0 C" N24.1.1 问题 915! J" F: T: f0 s
    24.1.2 解决方案 9152 o( ~1 ?5 o& r& d
    24.1.3 工作原理 9167 O$ v: }' \6 ?( Z7 t( T4 V
    24.2 开始使用Spring Dynamic Modules 922& n% a) h3 R( M! S
    24.2.1 问题 922( I: V2 N) I3 Y
    24.2.2 解决方案 922
    , t7 S, ?/ A3 F2 a) x24.2.3 工作原理 922- f; q% G, F# x: z0 V# U4 U
    24.3 用Spring Dynamic Modules输出服务 926" K4 X; Y& c6 X$ V" J3 i! k
    24.3.1 问题 926# b/ m- w5 y* P+ e  \6 Y
    24.3.2 解决方案 926. k* B+ x+ c: W2 [
    24.3.3 工作原理 926
    ! o7 E1 j; g2 C; T' f. [24.4 在OSGi注册表中寻找一个具体服务 929
    / |& L: E6 d1 ^5 U8 d- b) l24.4.1 问题 929
    * x& s+ j* _6 }3 ^5 W24.4.2 解决方案 930
    - E4 X: p- z/ v& s4 ~8 B' R24.4.3 工作原理 930
    7 G9 Q" w: u; f! `24.5 发布多个接口的一个服务 932
    / w. J. l$ J, c+ E3 s24.5.1 问题 932
    ) e' n8 G0 q' ^8 x. E; c0 y24.5.2 解决方案 932( g4 P/ k% \/ ^4 ~! o
    24.5.3 工作原理 932
    # Z1 @3 u! b- ]" ?" ^+ T24.6 定制Spring Dynamic Modules 933
    ' J+ f9 G8 U; W8 |! `24.6.1 问题 933
    & @3 o! |6 W9 f24.6.2 解决方案 933+ N6 B2 _. U! {, D" L: o8 l) e
    24.6.3 工作原理 933
    : Y3 `! R( x( x# p( w  C! W! B24.7 使用SpringSource dm Server 935* P0 L7 h$ w- r1 ~8 r
    24.7.1 问题 935, i0 g3 g/ E7 q( f* P
    24.7.2 解决方案 935; \9 v; d6 O9 W6 H9 F
    24.7.3 工作原理 9354 V* i& ?- x5 ]+ t) h
    24.8 SpringSource的各类工具 937
    2 J2 s8 c; d9 L( q2 S, {24.8.1 问题 937) V- c& [! q( T2 ], W
    24.8.2 解决方案 937
    - q; ?8 t, g: m. S; Z24.8.3 工作原理 937+ H4 ~  Q( y6 G* f* ?' n  t* t4 ?
    24.9 小结 938
    # @6 k9 A( `6 M' y  M) C) W2 N
    % R/ x2 v# @4 l8 @( |Java资料百度网盘下载地址链接(百度云):java自学网(javazx.com) Spring攻略(第2版)(Spring攻略(第2版))  PDF 高清 电子书 百度云.rar【密码回帖可见】
    6 K$ g% _$ |# j4 N$ E
    游客,如果您要查看本帖隐藏内容请回复
    ( p1 |: t, l& L# d; W. ~5 {

    + J$ U3 X$ @9 [) ^  i7 W$ \8 P

    % ^3 j- m; `6 R  F% x  n2 M( i3 k- X% O. K# O
    2 X- i1 l& w! B# B! t" i" r
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    3268

    帖子

    6538

    积分

    普通会员

    Rank: 2

    积分
    6538
    发表于 2019-12-24 14:41:51 | 显示全部楼层
    哈哈哈哈哈,开心
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-5-9 09:15
  • 签到天数: 4 天

    [LV.2]登堂入室

    0

    主题

    3357

    帖子

    6756

    积分

    普通会员

    Rank: 2

    积分
    6756
    发表于 2020-1-7 15:48:22 | 显示全部楼层
    努力学习努力学习努力学习
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2015-10-14 00:06
  • 签到天数: 2 天

    [LV.1]初学乍练

    1

    主题

    3413

    帖子

    6859

    积分

    普通会员

    Rank: 2

    积分
    6859
    发表于 2020-1-10 16:16:57 | 显示全部楼层
    学习学习java架构师
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2017-8-31 17:43
  • 签到天数: 1 天

    [LV.1]初学乍练

    0

    主题

    3402

    帖子

    6813

    积分

    普通会员

    Rank: 2

    积分
    6813
    发表于 2020-1-15 14:46:13 | 显示全部楼层
    感谢感谢感谢感谢感谢感谢感谢感谢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2015-7-28 14:19
  • 签到天数: 1 天

    [LV.1]初学乍练

    0

    主题

    3384

    帖子

    6786

    积分

    普通会员

    Rank: 2

    积分
    6786
    QQ
    发表于 2020-1-24 07:12:12 | 显示全部楼层
    大佬  厉害呀
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2015-8-7 16:31
  • 签到天数: 1 天

    [LV.1]初学乍练

    0

    主题

    3342

    帖子

    6699

    积分

    普通会员

    Rank: 2

    积分
    6699
    发表于 2020-2-10 12:15:28 | 显示全部楼层
    不错 支持下
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3318

    帖子

    6638

    积分

    禁止发言

    积分
    6638
    发表于 2020-2-16 10:56:23 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-6-4 18:31
  • 签到天数: 1 天

    [LV.1]初学乍练

    0

    主题

    3368

    帖子

    6757

    积分

    普通会员

    Rank: 2

    积分
    6757
    发表于 2020-2-26 06:14:10 | 显示全部楼层
    java我来看一下
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3349

    帖子

    6702

    积分

    普通会员

    Rank: 2

    积分
    6702
    发表于 2020-3-10 17:48:38 | 显示全部楼层
    非常好,!!!!!!!!!!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Java自学网

    GMT+8, 2024-5-7 01:19 , Processed in 0.283114 second(s), 30 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

    快速回复 返回顶部 返回列表