codecamp

Spring揭秘(图灵出品)

Spring揭秘(图灵出品)

王福强 著

  • 出版社: 人民邮电出版社
  • ISBN:9787115209429
  • 版次:1
  • 商品编码:10063640
  • 品牌:iTuring
  • 包装:平装
  • 开本:16开
  • 出版时间:2009-09-01
  • 用纸:胶版纸
  • 页数:666
  • 字数:1197000
  • 正文语种:中文


点此购买


内容简介

  《Spring揭秘》以幽默生动的语言、辅以有趣的故事和典故,循循善诱地阐述了Spring框架的方方面面。针对Spring框架的主要功能以及开发者们遇到最多的问题,首先介绍问题的相关背景,然后逐条进行深度剖析,最后通过分析来引入Spring框架可以提供的最佳解决方案。虽言Spring,却不局限于Spring,《Spring揭秘》向读者展现了更宽广的软件开发的世界!
  《Spring揭秘》非常适合Java开发人员阅读和参考。


作者简介

  王福强,资深软件开发专家和系统架构师,原任花旗软件(大连)资深软件工程师,现任阿里巴巴B2B平台技术部架构师。多年来一直专注于Java平台的技术发展,以及一线产品的技术选型和框架设计。拥有多年金融行业软件开发经历,负责过信贷、外汇交易、固定收益等金融系统的分析、设计、开发、维护、集成、扩展和性能调优等,对各种大型金融机构体系的技术架构与实现有丰富经验和独到的见解。作为国内最早使用Spring的开发者之一,他对spring的使用、设计和实现原理有着非常深入的了解。在本书中,他与读者分享了多年的Spring开发经验和探索企业级解决方案的心得。


精彩书评

  “本书非常棒!内容全面透彻,很有价值!”
  ——(Rod Johnson,Spring之父)
  “生动的语言和严谨的结构,构成了本书最大的特色。……大量生活化的比喻将难以理解的技术概念阐述得如此简单、清晰和易于理解。这不仅会帮助初学者快速掌握spring现代程序设计,而且可以帮助有经验的程序员深入Spring的构件精髓。”
  ——Yanger,Spring中文论坛刨始人,SpringTag.com运营总监
  “可以翻成英文版出口的好书,每个使用spring的团队都应该自备两本,一本堂皇地培训新人,一本绐老手们偷偷地温习。”
  ——江南自衣(www.springside.org.cn)
  “整本书文笔流畅,更不乏幽默与趣味,内容详略得当、取舍合理。另外,书中的内容极为全面,如果以后要把书当作参考手册的话,这些内容可以为您提供重要的信息。”
  ——DoJo中国,著名开源社区
  “本书语言生动幽默,内容全面而精辟,在阐释spring框架提供的各种功能和特性的同时,介绍了大量在spring实现中涉及的设计模式和最佳实践,很值得开发人员借鉴和参考。
  ——中文JAvA技术网


目录

第一部分 掀起Spring的盖头来

第1章 Spring框架的由来 2
1.1 Spring之崛起 2
1.2 Spring框架概述 3
1.3 Spring大观园 5
1.4 小结 8

第二部分 Spring的IoC容器

第2章 IoC的基本概念 10
2.1 我们的理念是:让别人为你服务 10
2.2 手语,呼喊,还是心有灵犀 13
2.2.1 构造方法注入 13
2.2.2 setter方法注入 13
2.2.3 接口注入 14
2.2.4 三种注入方式的比较 15
2.3 IoC的附加值 15
2.4 小结 17

第3章 掌管大局的IoC Service Provider 18
3.1 IoC Service Provider的职责 18
3.2 运筹帷幄的秘密——IoC Service Provider如何管理对象间的依赖关系 19
3.2.1 直接编码方式 19
3.2.2 配置文件方式 20
3.2.3 元数据方式 21
3.3 小结 21

第4章 Spring的IoC容器之BeanFactory 22
4.1 拥有BeanFactory之后的生活 24
4.2 BeanFactory的对象注册与依赖绑定方式 26
4.2.1 直接编码方式 26
4.2.2 外部配置文件方式 28
4.2.3 注解方式 31
4.3 BeanFactory的XML之旅 33
4.3.1 beans和bean 33
4.3.2 孤孤单单一个人 35
4.3.3 Help Me, Help You 36
4.3.4 继承?我也会! 50
4.3.5 bean的scope 51
4.3.6 工厂方法与FactoryBean 56
4.3.7 偷梁换柱之术 61
4.4 容器背后的秘密 66
4.4.1 “战略性观望” 66
4.4.2 插手“容器的启动” 67
4.4.3 了解bean的一生 74
4.5 小结 85

第5章 Spring IoC容器ApplicationContext 86
5.1 统一资源加载策略 86
5.1.1 Spring中的Resource 87
5.1.2 ResourceLoader,“更广义的URL” 88
5.1.3 ApplicationContext与ResourceLoader 91
5.2 国际化信息支持(I18n MessageSource) 97
5.2.1 Java SE提供的国际化支持 97
5.2.2 MessageSource与ApplicationContext 98
5.3 容器内部事件发布 102
5.3.1 自定义事件发布 102
5.3.2 Spring的容器内事件发布类结构分析 105
5.3.3 Spring容器内事件发布的应用 107
5.4 多配置模块加载的简化 109
5.5 小结 110

第6章 Spring IoC容器之扩展篇 111
6.1 Spring 2.5的基于注解的依赖注入 111
6.1.1 注解版的自动绑定(@Autowired) 111
6.1.2 @Autowired之外的选择——使用JSR250标注依赖注入关系 115
6.1.3 将革命进行得更彻底一些(class-path-scanning功能介绍) 116
6.2 Spring 3.0展望 119
6.3 小结 120

第三部分 Spring AOP框架

第7章 一起来看AOP 122
7.1 AOP的尴尬 124
7.2 AOP走向现实 125
7.2.1 静态AOP时代 125
7.2.2 动态AOP时代 126
7.3 Java平台上的AOP实现机制 126
7.3.1 动态代理 126
7.3.2 动态字节码增强 126
7.3.3 Java代码生成 127
7.3.4 自定义类加载器 127
7.3.5 AOL扩展 127
7.4 AOP国家的公民 128
7.4.1 Joinpoint 128
7.4.2 Pointcut 130
7.4.3 Advice 131
7.4.4 Aspect 133
7.4.5 织入和织入器 133
7.4.6 目标对象 133
7.5 小结 134

第8章 Spring AOP概述及其实现机制 135
8.1 Spring AOP概述 135
8.2 Spring AOP的实现机制 136
8.2.1 设计模式之代理模式 136
8.2.2 动态代理 139
8.2.3 动态字节码生成 141
8.3 小结 142

第9章 Spring AOP一世 143
9.1 Spring AOP中的Joinpoint 143
9.2 Spring AOP中的Pointcut 144
9.2.1 常见的Pointcut 146
9.2.2 扩展Pointcut(Customize Pointcut) 151
9.2.3 IoC容器中的Pointcut 152
9.3 Spring AOP中的Advice 153
9.3.1 per-class类型的Advice 153
9.3.2 per-instance类型的Advice 159
9.4 Spring AOP中的Aspect 163
9.4.1 PointcutAdvisor家族 164
9.4.2 IntroductionAdvisor分支 167
9.4.3 Ordered的作用 168
9.5 Spring AOP的织入 170
9.5.1 如何与ProxyFactory打交道 170
9.5.2 看清ProxyFactory的本质 175
9.5.3 容器中的织入器——ProxyFactoryBean 179
9.5.4 加快织入的自动化进程 185
9.6 TargetSource 190
9.6.1 可用的TargetSource实现类 191
9.6.2 自定义TargetSource 195
9.7 小结 197

第10章 Spring AOP二世 198
10.1 @AspectJ形式的Spring AOP 198
10.1.1 @AspectJ形式AOP使用之先睹为快 199
10.1.2 @AspectJ形式的Pointcut 201
10.1.3 @AspectJ形式的Advice 211
10.1.4 @AspectJ中的Aspect更多话题 220
10.2 基于Schema的AOP 223
10.2.1 基于Schema的AOP配置概览 223
10.2.2 向基于Schema的AOP迁移 225
10.2.3 @AspectJ到“基于Schema的AOP”迁移 227
10.3 小结 235

第11章 AOP应用案例 237
11.1 异常处理 237
11.1.1 Java异常处理 237
11.1.2 Fault Barrier 238
11.2 安全检查 239
11.3 缓存 240
11.4 小结 240

第12章 Spring AOP之扩展篇 241
12.1 有关公开当前调用的代理对象的探讨 241
12.1.1 问题的现象 241
12.1.2 原因的分析 242
12.1.3 解决方案 243
12.2 小结 245

第四部分 使用Spring访问数据

第13章 统一的数据访问异常层次体系 249
13.1 DAO模式的背景 249
13.2 梦想照进现实 251
13.3 发现问题,解决问题 252
13.4 不重新发明轮子 254
13.5 小结 257

第14章 JDBC API的最佳实践 258
14.1 基于Template的JDBC使用方式 258
14.1.1 JDBC的尴尬 258
14.1.2 JdbcTemplate的诞生 261
14.1.3 JdbcTemplate和它的兄弟们 274
14.1.4 Spring中的DataSource 296
14.1.5 JdbcDaoSupport 301
14.2 基于操作对象的JDBC使用方式 302
14.2.1 基于操作对象的查询 303
14.2.2 基于操作对象的更新 310
14.2.3 基于操作对象的存储过程调用 313
14.3 小结 316

第15章 Spring对各种ORM的集成 317
15.1 Spring对Hibernate的集成 318
15.1.1 旧日“冬眠”时光 318
15.1.2 “春天”里的“冬眠” 321
15.2 Spring对iBATIS的集成 329
15.2.1 iBATIS实践之“前生”篇 329
15.2.2 iBATIS实践之“今世”篇 331
15.3 Spring中对其他ORM方案的集成概述 337
15.3.1 Spring对JDO的集成 337
15.3.2 Spring对TopLink的集成 340
15.3.3 Spring对JPA的集成 341
15.4 小结 344

第16章 Spring数据访问之扩展篇 345
16.1 活用模板方法模式及Callback 345
16.1.1 FTPClientTemplate 345
16.1.2 HttpClientTemplate 349
16.2 数据访问中的多数据源 350
16.2.1 “主权独立”的多数据源 350
16.2.2 “合纵连横”的多数据源 352
16.2.3 结束语 354
16.3 Spring 3.0展望 356
16.4 小结 356

第五部分 事务管理

第17章 有关事务的楔子 358
17.1 认识事务本身 358
17.2 初识事务家族成员 360
17.3 小结 362

第18章 群雄逐鹿下的Java事务管理 363
18.1 Java平台的局部事务支持 363
18.2 Java平台的分布式事务支持 365
18.2.1 基于JTA的分布式事务管理 366
18.2.2 基于JCA的分布式事务管理 367
18.3 继续前行之前的反思 367
18.4 小结 369

第19章 Spring事务王国的架构 370
19.1 统一中原的过程 371
19.2 和平年代 376
19.2.1 TransactionDefinition 376
19.2.2 TransactionStatus 382
19.2.3 PlatformTransac-tionManager 382
19.3 小结 392

第20章 使用Spring进行事务管理 393
20.1 编程式事务管理 393
20.1.1 直接使用PlatformTran-sactionManager进行编程式事务管理 393
20.1.2 使用TransactionTemp-late进行编程式事务管理 394
20.1.3 编程创建基于Savepoint的嵌套事务 396
20.2 声明式事务管理 397
20.2.1 引子 397
20.2.2 XML元数据驱动的声明式事务 399
20.2.3 注解元数据驱动的声明式事务 410
20.3 小结 413

第21章 Spring事务管理之扩展篇 414
21.1 理解并活用ThreadLocal 414
21.1.1 理解ThreadLocal的存在背景 414
21.1.2 理解ThreadLocal的实现 415
21.1.3 ThreadLocal的应用场景 416
21.1.4 使用ThreadLocal管理多数据源切换的条件 417
21.2 谈Strategy模式在开发过程中的应用 420
21.3 Spring与JTA背后的奥秘 423
21.4 小结 427

第六部分 Spring的Web MVC框架

第22章 迈向Spring MVC的旅程 430
22.1 Servlet独行天下的时代 430
22.2 繁盛一时的JSP时代 433
22.3 Servlet与JSP的联盟 436
22.4 数英雄人物,还看今朝 438
22.5 小结 440

第23章 Spring MVC初体验 441
23.1 鸟瞰Spring MVC 442
23.2 实践出真知 446
23.2.1 Spring MVC应用的物理结构 447
23.2.2 按部就班地开始工作 451
23.3 小结 459

第24章 近距离接触Spring MVC主要角色 460
24.1 忙碌的协调人HandlerMapping 460
24.1.1 可用的HandlerMapping 461
24.1.2 HandlerMapping执行序列(Chain Of HandlerMapping) 463
24.2 我们的亲密伙伴Controller 464
24.2.1 AbstractController 465
24.2.2 MultiActionController 468
24.2.3 SimpleFormController 476
24.2.4 AbstractWizard-FormController 496
24.2.5 其他可用的Controller实现 503
24.3 ModelAndView 505
24.3.1 ModelAndView中的视图信息 505
24.3.2 ModelAndView中的模型数据 506
24.4 视图定位器ViewResolver 506
24.4.1 可用的ViewResolver实现类 507
24.4.2 ViewResolver查找序列(Chain Of ViewResolver) 511
24.5 各司其职的View 511
24.5.1 View实现原理回顾 512
24.5.2 可用的View实现类 515
24.5.3 自定义View实现 521
24.6 小结 523

第25章 认识更多Spring MVC家族成员 524
25.1 文件上传与MultipartResolver 525
25.1.1 使用MultipartResolver进行文件上传的简单分析 526
25.1.2 文件上传实践 527
25.2 Handler与HandlerAdaptor 530
25.2.1 问题的起源 530
25.2.2 深入了解Handler 531
25.2.3 近看HandlerAdaptor的奥秘 533
25.2.4 告知Handler与Handler-Adaptor的存在 535
25.3 框架内处理流程拦截与Handler-Interceptor 536
25.3.1 可用的Handler-Interceptor实现 537
25.3.2 自定义实现Handler-Interceptor 538
25.3.3 HandlerInterceptor寻根 540
25.3.4 HandlerInterceptor之外的选择 541
25.4 框架内的异常处理与Handler-ExceptionResolver 544
25.5 国际化视图与LocalResolver 548
25.5.1 可用的LocaleResolver 549
25.5.2 LocaleResolver的足迹 550
25.5.3 Locale的变更与LocaleChangeHandler 551
25.6 主题(Theme)与ThemeResolver 552
25.6.1 提供主题资源的ThemeSource 552
25.6.2 管理主题的ThemeResolver 554
25.6.3 切换主题的ThemeChange-Interceptor 555
25.7 小结 556

第26章 Spring MVC中基于注解的Controller 557
26.1 初识基于注解的Controller 557
26.2 基于注解的Controller原型分析 558
26.2.1 自定义用于基于注解的Contro-ller的HandlerMapping 558
26.2.2 自定义用于基于注解的Contro-ller的HandlerAdaptor 560
26.3 近看基于注解的Controller 563
26.3.1 声明基于注解的Controller 563
26.3.2 请求参数到方法参数的绑定 569
26.3.3 使用@ModelAttribute访问模型数据 572
26.3.4 通过@SessionAttribute管理Session数据 574
26.4 小结 576

第27章 Spring MVC之扩展篇 577
27.1 Spring MVC也Convention Over Configuration 577
27.1.1 Convention Over Configuration简介 577
27.1.2 Spring MVC中的Convention Over Configuration 578
27.2 Spring 3.0展望 581
27.3 小结 582

第七部分 Spring框架对J2EE服务的集成和支持

第28章 Spring框架内的JNDI支持 584
28.1 JNDI简单回顾 584
28.2 Spring框架内JNDI访问的基石——JndiTemplate 585
28.3 JNDI对象的依赖注入——JndiObjectFactoryBean 587
28.4 小结 588

第29章 Spring框架对JMS的集成 589
29.1 说说JMS的身世 589
29.2 使用JMS API进行应用开发的传统套路 590
29.3 Spring改进后的JMS实战格斗术 592
29.3.1 消息发送和同步接收 592
29.3.2 异步消息接收 601
29.3.3 JMS相关异常处理 607
29.3.4 框架内的事务管理支持 608
29.4 小结 609

第30章 使用Spring发送E-mail 610
30.1 思甜前,先忆苦 610
30.2 Spring的E-mail抽象层分析 612
30.2.1 直接创建邮件消息并发送 614
30.2.2 使用MimeMessage-Preparator发送邮件 615
30.3 Spring的E-mail支持在实际开发中的应用 616
30.4 小结 622

第31章 Spring中的任务调度和线程池支持 623
31.1 Spring与Quartz 623
31.1.1 初识Quartz 623
31.1.2 融入Spring大家庭的Quartz 626
31.2 Spring对JDK Timer的集成 631
31.2.1 JDK Timer小记 631
31.2.2 Spring集成后的JDK Timer 632
31.3 Executor的孪生兄弟TaskExecutor 634
31.3.1 可用的TaskExecutor 635
31.3.2 TaskExecutor使用实例 637
31.4 小结 639

第32章 Spring框架对J2EE服务的集成之扩展篇 640
32.1 MailMonitor的延伸 640
32.2 Spring 3.0展望 642
32.3 小结 642

第33章 Spring远程方案 643
33.1 从“对面交谈”到“千里传声” 643
33.2 Spring Remoting架构分析 645
33.2.1 Spring Remoting之远程访问异常体系 645
33.2.2 统一风格的远程服务公开与访问方式 646
33.3 Spring Remoting提供的远程服务支持 648
33.3.1 基于RMI的Remoting方案 648
33.3.2 基于HTTP的轻量级Remoting方案 651
33.3.3 基于Web服务的远程方案 655
33.3.4 基于JMS的远程方案 658
33.4 扩展Spring Remoting 660
33.5 Spring Remoting之扩展篇 663
33.5.1 拉开JMX演出的序幕 663
33.5.2 Spring 3.0展望 664

参考文献 665


精彩书摘

  第一部分 掀起Spring的盖头来
  第1章 Spring框架的由来
  1.1 Sprig之崛起
  在中世纪的欧洲,当重装骑兵所向披靡时,哪国的军队中如果没有一支重装骑兵真的会让人笑话的,按照电影《大腕》里的一句话说“你都不好意思跟人打招呼”。应该说,在当时的历史/军事环境下,重装骑兵在军队中确实发挥了不可或缺的作用。有时候,一次关键时刻的重装骑兵冲锋就可以奠定战局的胜利。但是,时过境迁,历史的车轮一直在向前缓缓行进,重装骑兵头上的光环也随之渐趋黯淡,其缺点开始显露无遗。
  重装骑兵代价高昂。一名重装骑兵的装备花费几乎能够武装一小队轻步兵,对于财力不够雄厚的国家来说,维持一支常备的重装骑兵队伍绝非易事。实际上,对于财力雄厚的大国(相当于IT界的IBM、微软)来说,为了减轻财政上的压力,通常也是将这部分花销尽量摊派给贵族。
  兵种自身限制太多。沉重的盔甲以及一整套装备使得重装骑兵的机动性和灵活性大打折扣,在正式投入战斗之前,重装骑兵需要很长时间的列装和部署,对于瞬息万变的战场形势来说,某些情况下,这等同于自杀。
  发挥作用的场景有限。纵使各翼军队能够掩护重装骑兵完成部署,但如果战场地形不适合重装骑兵冲锋,那也就无法让他们大显身手,前期的准备或者战斗掩护就更是得不偿失。


前言/序言

  在Spring作为关键词在每一位技术人员简历里面出现的今天,我们可以深刻地体会到sp血g的春天真的来了。
  Spring经过几年的实战和演变,已经不再是一个单纯的体系框架,而代表着轻量级Java开发的规范。在短短几年的发展中,Spring给Java企业级开发带来了无比强大的推动力,让轻量级开发技术飞速发展。在Spring中,简单实现涵盖了一切元素,让我们将Java这门语言的所有特性发挥得淋漓尽致。通过Spring,你不仅可以学到如何应对每个领域的最佳实践,而且可以深入理解Java企业级开发中各层面的体系结构。因而,这简单的背后隐藏着巨大的秘密。
  本书是揭开秘密的一把钥匙。作者借用大量的生活化比喻将Spring各环节的技术概念清晰、简单地展现在读者面前,让众多技术概念不再生硬难懂。同时,本书借助对spring各项功能的解读,将读者带入Java企业级开发的方方面面,不仅具体讲述了如何应对领域问题,而且还将背后的领域知识关联起来,让我们了解其因果关系和各种实践的差异和不同。更值得称赞的是书中的实例场景非常实用,可见作者的代码精心提取于实战项目,让读者在深入理解概念应用的同时,可以参考实际的使用方法去解决自己项目中同类型的问题,为可行性提供了有力的证明。
  通过阅读,相信读者获得的不仅仅是对Spring的深入理解,而是一种系统化知识的演练,一种开放构架思维的突破,一种解决问题的思路方法。如果你也想将Spring作为关键词放入你的简历之中,那么我相信你需要了解的不仅是如何使用Spring这样简单的问题,还需要知道它背后众多的“秘密”。


点此购买


华章专业开发者丛书·Java并发编程实战 [Java Concurrency in Practice]
MyBatis技术内幕(博文视点出品)
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

机器学习系列书籍

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }