2019-02-20 Spring实战(第4版)

目录

编辑

第1部分 Spring的核心

第1章 Spring之旅 3

1.1 简化Java开发 4

1.1.1 激发POJO的潜能 5

1.1.2 依赖注入 5

1.1.3 应用切面 11

1.1.4 使用模板消除样板式代码 16

1.2 容纳你的Bean 18

1.2.1 使用应用上下文 19

1.2.2 bean的生命周期 20

1.3 俯瞰Spring风景线 21

1.3.1 Spring模块 22

1.3.2 Spring Portfolio 24

1.4 Spring的新功能 27

1.4.1 Spring 3.1新特性 27

1.4.2 Spring 3.2新特性 28

1.4.3 Spring 4.0新特性 30

1.5 小结 30

第2章 装配Bean 33

2.1 Spring配置的可选方案 34

2.2 自动化装配bean 35

2.2.1 创建可被发现的bean 35

2.2.2 为组件扫描的bean命名 38

2.2.3 设置组件扫描的基础包 39

2.2.4 通过为bean添加注解实现自动装配 40

2.2.5 验证自动装配 42

2.3 通过Java代码装配

bean 44

2.3.1 创建配置类 44

2.3.2 声明简单的bean 45

2.3.3 借助JavaConfig实现注入 46

2.4 通过XML装配bean 48

2.4.1 创建XML配置规范 48

2.4.2 声明一个简单的

bean 49

2.4.3 借助构造器注入初始化bean 50

2.4.4 设置属性 56

2.5 导入和混合配置 61

2.5.1 在JavaConfig中引用XML配置 61

2.5.2 在XML配置中引用JavaConfig 63

2.6 小结 65

第3章 高级装配 67

3.1 环境与profile 67

3.1.1 配置profile bean 69

3.1.2 激活profile 73

3.2 条件化的bean 75

3.3 处理自动装配的歧义性 78

3.3.1 标示首选的bean 79

3.3.2 限定自动装配的bean 80

3.4 bean的作用域 84

3.4.1 使用会话和请求作用域 86

3.4.2 在XML中声明作用域代理 88

3.5 运行时值注入 88

3.5.1 注入外部的值 89

3.5.2 使用Spring表达式语言进行装配 93

3.6 小结 99

第4章 面向切面的Spring 101

4.1 什么是面向切面编程? 102

4.1.1 定义AOP术语 103

4.1.2 Spring对AOP的支持 105

4.2 通过切点来选择连接点 107

4.2.1 编写切点 108

4.2.2 在切点中选择bean 109

4.3 使用注解创建切面 109

4.3.1 定义切面 110

4.3.2 创建环绕通知 114

4.3.3 处理通知中的参数 115

4.3.4 通过注解引入新功能 118

4.4 在XML中声明切面 120

4.4.1 声明前置和后置通知 122

4.4.2 声明环绕通知 124

4.4.3 为通知传递参数 125

4.4.4 通过切面引入新的功能 127

4.5 注入AspectJ切面 128

4.5 小结 131

第2部分 Web中的Spring

第5章 构建Spring Web应用程序 135

5.1 Spring MVC起步 136

5.1.1 跟踪Spring MVC的请求 136

5.1.2 搭建Spring MVC 138

5.1.3 Spittr应用简介 142

5.2 编写基本的控制器 143

5.2.1 测试控制器 145

5.2.2 定义类级别的请求处理 146

5.2.3 传递模型数据到视图中 147

5.3 接受请求的输入 153

5.3.1 处理查询参数 153

5.3.2 通过路径参数接受输入 155

5.4 处理表单 157

5.4.1 编写处理表单的控制器 160

5.4.2 校验表单 163

5.5 小结 166

第6章 渲染Web视图 167

6.1 理解视图解析 167

6.2 创建JSP视图 170

6.2.1 配置适用于JSP的视图解析器 170

6.2.2 使用Spring的JSP库 172

6.3 使用Apache Tiles视图定义布局 184

6.3.1 配置Tiles视图解析器 185

6.4 使用Thymeleaf 190

6.4.1 配置Thymeleaf视图解析器 190

6.4.2 定义Thymeleaf模板 192

6.5 小结 196

第7章 Spring MVC的高级技术 197

7.1 Spring MVC配置的替代方案 198

7.1.1 自定义DispatcherServlet配置 198

7.1.2 添加其他的Servlet和Filter 199

7.1.3 在web.xml中声明DispatcherServlet 201

7.2 处理multipart形式的数据 204

7.2.1 配置multipart解析器 205

7.2.2 处理multipart请求 208

7.3 处理异常 212

7.3.1 将异常映射为HTTP状态码 213

7.3.2 编写异常处理的方法 214

7.4 为控制器添加通知 216

7.5 跨重定向请求传递数据 217

7.5.1 通过URL模板进行重定向 218

7.5.2 使用flash属性 219

7.6 小结 221

第8章 使用Spring WebFlow 223

8.1 在Spring中配置Web Flow 224

8.1.1 装配流程执行器 224

8.1.2 配置流程注册表 224

8.1.3 处理流程请求 225

8.2 流程的组件 226

8.2.1 状态 226

8.2.2 转移 230

8.2.3 流程数据 231

8.3 组合起来:披萨流程 232

8.3.1 定义基本流程 233

8.3.2 收集顾客信息 236

8.3.2 构建订单 242

8.3.2 支付 244

8.4 保护Web流程 246

8.5 小结 246

第9章 保护Web应用 249

9.1 Spring Security简介 250

9.1.1 理解Spring Security的模块 250

9.1.2 过滤Web请求 251

9.1.3 编写简单的安全性配置 252

9.2 选择查询用户详细信息的服务 255

9.2.1使用基于内存的用户存储 255

9.2.2 基于数据库表进行认证 257

9.2.3 基于LDAP进行认证 259

9.2.4 配置自定义的用户服务 263

9.3 拦截请求 265

9.3.1 使用Spring表达式进行安全保护 267

9.3.2 强制通道的安全性 269

9.3.3 防止跨站请求伪造 270

9.4 认证用户 271

9.4.1 添加自定义的登录页 272

9.4.2 启用HTTP Basic认证 274

9.4.3 启用Remember-me功能 274

9.4.4 退出 275

9.5 保护视图 276

9.5.1 使用Spring Security的JSP标签库 276

9.5.2 使用Thymeleaf的SpringSecurity方言 280

9.6 小结 281

第3部分 后端中的Spring

第10章 通过Spring和JDBC征服数据库 285

10.1 Spring的数据访问哲学 286

10.1.1 了解Spring的数据访问异常体系 287

10.1.2 数据访问模板化 289

10.2 配置数据源 291

10.2.1 使用JNDI数据源 292

10.2.2 使用数据源连接池 292

10.2.3 基于JDBC驱动的数据源 294

10.2.4 使用嵌入式的数据源 295

10.2.5 使用profile选择数据源 296

10.3 在Spring中使用

JDBC 298

10.3.1 应对失控的JDBC代码 299

10.3.2 使用JDBC模板 302

10.4 小结 307

第11章 使用对象-关系映射持久化数据 309

11.1 在Spring中集成Hibernate 310

11.1.1 声明Hibernate的Session工厂 311

11.1.2 构建不依赖于Spring的Hibernate代码 313

11.2 Spring与Java持久化API 315

11.2.1 配置实体管理器工厂 315

11.2.2 编写基于JPA的Repository 320

11.3 借助Spring Data实现自动化的JPA Repository 322

11.3.1 定义查询方法 325

11.3.2 声明自定义查询 328

11.3.3 混合自定义的功能 329

11.4 小结 330

第12章 使用NoSQL数据库 333

12.1 使用MongoDB持久化文档数据 334

12.1.1 启用MongoDB 335

12.1.2 为模型添加注解,实现MongoDB持久化 338

12.1.3 使用MongoTemplate访问MongoDB 341

12.1.4 编写MongoDBRepository 342

12.2 使用Neo4j操作图数据 347

12.2.1 配置Spring DataNeo4j 347

12.2.2 使用注解标注图实体 350

12.2.3 使用Neo4jTemplate 353

12.2.4 创建自动化的Neo4j Repository 354

12.3 使用Redis操作key-value数据 359

12.3.1 连接到Redis 359

12.3.2 使用RedisTemplate 360

12.3.3 使用key和value的序列化器 364

12.4 小结 365

第13章 缓存数据 367

13.1 启用对缓存的支持 368

13.1.1 配置缓存管理器 369

13.2 为方法添加注解以支持缓存 373

13.2.1 填充缓存 374

13.2.2 移除缓存条目 378

13.3 使用XML声明缓存 379

13.4 小结 383

第14章 保护方法应用 385

14.1 使用注解保护方法 386

14.1.1 使用@Secured注解限制方法调用 386

14.1.2 在Spring Security中使用

JSR-250的@RolesAllowed注解 387

14.2 使用表达式实现方法级别的安全性 388

14.2.1 表述方法访问规则 389

14.2.2 过滤方法的输入和输出 391

14.3 小结 395

第4部分 Spring集成

第15章 使用远程服务 399

15.1 Spring远程调用概览 400

15.2 使用RMI 402

15.2.1 导出RMI服务 403

15.2.2 装配RMI服务 405

15.3 使用Hessian和Burlap发布远程服务 407

15.3.1 使用Hessian和Burlap导出bean的功能 408

15.3.2 访问Hessian/Burlap服务 411

15.4 使用Spring的HttpInvoker 413

15.4.1 将bean导出为HTTP服务 413

15.4.2 通过HTTP访问服务 414

15.5 发布和使用Web服务 416

15.5.1 创建基于Spring的JAX-WS端点 416

15.5.2 在客户端代理JAX-WS服务 419

15.6 小结 421

第16章 使用Spring MVC创建REST API 423

16.1 了解REST 424

16.1.1 REST的基础知识 424

16.1.2 Spring是如何支持REST的 425

16.2 创建第一个REST端点 426

16.2.1 协商资源表述 428

16.2.2 使用HTTP信息转换器 433

16.3 提供资源之外的其他内容 438

16.3.1 发送错误信息到客户端 438

16.3.2 在响应中设置头部信息 443

16.4 编写REST客户端 445

16.4.1 了解RestTemplate的操作 446

16.4.2 GET资源 447

16.4.3 检索资源 448

16.4.4 抽取响应的元数据 449

16.4.5 PUT资源 450

16.4.6 DELETE资源 451

16.4.7 POST资源数据 452

16.4.8 在POST请求中获取响应对象 452

16.4.9 在POST请求后获取资源位置 453

16.4.10 交换资源 454

16.5 小结 456

第17章 Spring消息 457

17.1 异步消息简介 458

17.1.1 发送消息 459

17.1.2 评估异步消息的优点 461

17.2 使用JMS发送消息 463

17.2.1 在Spring中搭建消息代理 463

17.2.2 使用Spring的JMS模板 465

17.2.3 创建消息驱动的POJO 474

17.2.4 使用基于消息的RPC 477

17.3 使用AMQP实现消息功能 479

17.3.1 AMQP简介 480

17.3.2 配置Spring支持AMQP消息 481

17.3.3 使用RabbitTemplate发送消息 484

17.3.4 接收AMQP消息 486

17.4 小结 489

第18章 使用WebSocket和STOMP实现消息功能 491

18.1 使用Spring的低层级WebSocket API 492

18.2 应对不支持WebSocket的场景 497

18.3 使用STOMP消息 500

18.3.1 启用STOMP消息功能 501

18.3.2 处理来自客户端的STOMP消息 504

18.3.3 发送消息到客户端 507

18.4 为目标用户发送消息 511

18.4.1 在控制器中处理用户的消息 512

18.4.2 为指定用户发送消息 514

18.5 处理消息异常 515

18.6 小结 516

第19章 使用Spring发送Email 517

19.1 配置Spring发送邮件 518

19.1.1 配置邮件发送器 518

19.1.2 装配和使用邮件发送器 520

19.2 构建丰富内容的Email消息 521

19.2.1 添加附件 521

19.2.2 发送富文本内容的Email 522

19.3 使用模板生成Email 524

19.3.1 使用Velocity构建Email消息 524

19.3.2 使用Thymeleaf构建Email消息 526

19.4 小结 528

第20章 使用JMX管理Spring Bean 529

20.1 将Spring bean导出为MBean 530

20.1.1 通过名称暴露方法 533

20.1.2 使用接口定义MBean的操作和属性 535

20.1.3 使用注解驱动的MBean 536

20.1.4 处理MBean冲突 538

20.2 远程MBean 539

20.2.1 暴露远程MBean 539

20.2.2 访问远程MBean 540

20.2.3 代理MBean 542

20.3 处理通知 543

20.3.1 监听通知 544

20.4 小结 545

第21章 借助Spring Boot简化Spring开发 547

21.1 Spring Boot简介 548

21.1.1 添加Starter依赖 548

21.1.2 自动配置 552

21.1.3 Spring Boot CLI 552

21.1.4 Actuator 553

21.2 使用Spring Boot构建应用 553

21.2.1 处理请求 556

21.2.2 创建视图 558

21.2.3 添加静态内容 560

21.2.4 持久化数据 561

21.2.5 尝试运行 563

21.3 组合使用Groovy与SpringBoot CLI 566

21.3.1 编写Groovy控制器 566

21.3.2 使用Groovy Repository实现数据持久化 569

21.3.3 运行Spring Boot CLI 570

21.4 通过Actuator获取了解应用内部状况 571

21.5 小结 574

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335

推荐阅读更多精彩内容

  • 观其大纲 第一部分 基本管理技术 1第1章 从何处入手 2第2章 脚本和shell 24第3章 引导和关机 62第...
    周少言阅读 1,706评论 1 2
  • 25个经典的Spring面试问答 本人收集了一些在大家在面试时被经常问及的关于Spring的主要问题,这些问题有可...
    杀小贼阅读 669评论 0 2
  • 因为头发挺长的,其实也不是很长,只不过习惯了比较短的头发,特别是夏天,天气热。 几天前都想剪了,只是每次出去的时候...
    蓝锐南阅读 499评论 0 0
  • 《活着》是著名作家余华的作品之一。讲述了一个人从大起大落到以牛作伴的悲惨人生。福贵本事当地的富家少爷,从小桀骜不驯...
    Kiqe一枝独秀阅读 126评论 0 0
  • 果实都沉甸甸的在风中摇曳,也有许多花朵不舍离开的仍在绽放,,,微风带来的是缕缕清凉,给我的也是满怀希望,,,,...
    gdz1023阅读 290评论 0 0