Java编程方法论:响应式RxJava与代码设计实战
  • 推荐1
  • 收藏7
  • 浏览1.9K

Java编程方法论:响应式RxJava与代码设计实战

知秋(李飞) , 李飞 (作者)  付睿 (责任编辑)

  • 丛  书:Java编程方法论系列丛书
  • 书  号:978-7-121-36417-4
  • 出版日期:2019-06-01
  • 页  数:296
  • 开  本:16(185*235)
  • 出版状态:上市销售
  • 维护人:付睿
本书对RxJava 2的源码进行了深入解读,让读者可以从设计到实现细节上全面了解它,从而达到不仅会用而且可以进行RxJava 2源码库组件级别的拓展的程度。本书的目的不仅是介绍RxJava 2,而且更希望通过一个成熟、优秀的代码库来向读者展示阅读源码的思路及编程方面的技巧,其中包含了并发编程的实战技巧、数据结构的设计方法、设计模式的使用方法、函数式编程的各种技巧等,希望读者可以深入思考并获得属于自己的一套编程方法论。这也是“Java编程方法论系列丛书”的初衷,授之以鱼不如授之以渔。
本书适合有Java编程基础的中高级Java开发工程师、想要学习代码设计思路与技巧的读者、对响应式编程感兴趣的读者阅读。
响应式是未来的编程趋势,本书是讲解响应式技术RxJava 2的书籍,在进行源码导读的同时,也引导读者对代码设计进行思考。包含大量案例,并配有相关视频。
知秋,本名李飞,长期致力于基础代码库的研发工作,通过博客与视频平台bilibili,结合自己的经验做了大量源码解读的分享。对JDK、Spring、RxJava、Spring Reactor、Netty、Reactor-Netty等有很深刻的研究和独到的见解,并以此打造“Java编程方法论系列丛书”。基于开源精神,与志同道合的伙伴们一起创建了simviso开源分享团队,为开源社区服务。
前 言

本书是“Java编程方法论系列丛书”的第一本书,“Java编程方法论系列丛书”将我多年的代码经验通过讲述优秀的RxJava 2、Reactor 3、Reactor-Netty与Spring WebFlux等框架库的源码细节展现出来,目的是让大家可以学习一种读源码的方式。也就是说,看源码不仅要看懂它干了什么,而且更应该看相关源码的设计思路以及技巧。这就好比研读一篇好文章一样,要揣摩作者的行文方式。
与理解代码相比,我更愿意带给大家的是一种生活态度。Java的第一个身份是语言,语言是用于描述我们的思想和生活的,所以带着生活中的理念来读源码,你就会发现情况大为不同:各种编程技巧和实现思路通通摆在了你的眼前。本系列丛书就是从这个角度出发的,所以针对的读者是那些想要提高自己对于基础代码掌控能力的中高级程序员。
下面具体介绍一下本书内容。本书主要讲解了到底什么是响应式,从代码设计层面将JDK 9+中的Flow API、RxJava 2中关于源的创建,以及调度与背压等相关核心操作娓娓道来,并通过实战案例帮助大家更好地理解和使用相关的API。本书涉及了大量并发编程方面的技巧,以及从基础代码角度介绍了各种接口、设计模式和与之相关的基础知识点,并将它们融会贯通。这就好比我们上学的时候,老师向我们传授基础知识,然后通过习题让我们掌握这些基础知识的运用技巧。本书也遵循了这个思路,同时这也符合我写书的初衷。
限于篇幅,有些内容没能完全在书中呈现,为了降低图书的阅读理解难度,我专门录制了相关的分享视频,可以更直观地带领大家走进源码世界。视频可以说是图书的有益补充,欢迎大家观看、学习。另外,希望读者通过学习本书了解响应式编程如何带来程序性能的提升以及其正确的使用方式。在录制本系列丛书的另一本书《Java编程方法论:响应式Reactor 3、Reactor-Netty和Spring WebFlux》(后续出版)的相关视频时,使我感到很荣幸的是,视频得到了Spring官方的肯定,并在Spring官方推特和博客上进行了宣传、推广,这增加了我对本系列丛书的信心。
最后,感谢尹相宇同学,没有你听我啰啰唆唆地讲代码,我估计自己的这份激情难以维持,当然,这本书的顺利出版也离不开你的审阅。另外,需要感谢的还有付睿编辑,她帮助我修正了很多表达细节上的错误。最后,感谢我的家人对我的理解和默默付出。

知秋(李飞)
2019年2月15日

目录

第1章 响应式编程总览(Reactive Programming) 1
1.1 异步编程模式 1
1.1.1 并发 2
1.1.2 并行开发初探 3
1.2 流(Stream) 3
1.3 响应式流(Reactive Stream) 4
1.3.1 响应式流的特性 4
1.3.2 响应式开发的设计原则 5
1.3.3 响应式开发的好处 6
1.4 响应式开发工具库 6
1.4.1 RxJava简介 6
1.4.2 Reactor简介 7
1.4.3 MongoDB简介 8
1.4.4 响应式项目用例 8
1.5 Java 9中的响应式编程 10
1.5.1 响应式编程接口 10
1.5.2 Java 9响应式编程入门Demo 12
1.5.3 SubmissionPublisher类的源码解读 18
1.5.4 响应式编程整合Spring实战案例 23
1.6 小结 29
第2章 在RxJava中创建Observable 30
2.1 响应式编程所涉及的设计模式 30
2.1.1 观察者模式 30
2.1.2 迭代器模式 30
2.2 解读reactivex.Observable 31
2.2.1 从Flow.Publisher到Observable 33
2.2.2 subscribe的二三事 33
2.2.3 create方法的设计思想 36
2.2.4 各式各样的Observable 40
2.2.5 Observable.cache 43
2.2.6 无限流 49
2.2.7 在Observable内处理错误 54
2.2.8 定时控制Observable发送数据 56
2.2.9 Disposable延伸 59
2.2.10 ConnectableObservable解读 67
2.2.11 Observable中的publish.refCount解读 76
2.2.12 RxJava中的Subject解读 79
2.3 小结 89
第3章 RxJava 2中的操作 90
3.1 核心操作 90
3.1.1 使用filter进行条件过滤 90
3.1.2 使用map进行元素转换 96
3.1.3 使用flatMap进行扁平化转换 98
3.1.4 使用scan累加器 112
3.1.5 使用groupBy进行分组 114
3.2 多个Observable的合并操作 122
3.2.1 使用merge对Observable进行合并 122
3.2.2 使用zip方法进行合并 124
3.2.3 combineLatest操作 135
3.2.4 withLatestFrom操作 141
3.2.5 amb操作 142
3.3 高级操作 143
3.3.1 再谈累加器scan 143
3.3.2 聚合操作reduce 144
3.3.3 收集操作collect 146
3.3.4 使用distinct去重 148
3.3.5 使用distinctUntilChanged过滤重复数据 152
3.3.6 其他操作 152
3.3.7 自定义操作 153
3.4 小结 159
第4章 对RxJava 2的设计探索 160
4.1 源的创建设计思路 160
4.2 中间操作的转承 162
4.3 小结 166
第5章 Observable实战 167
5.1 初版架子实现 167
5.1.1 DAO层面的处理工作 167
5.1.2 控制层的响应式实现 172
5.2 基于架子实现一个汇率查询的服务 175
5.3 rxjava-web-spring-boot-starter的抽取设计 179
5.4 ObservableSseEmitter的设计实现 188
5.5 小结 196
第6章 RxJava 2中的多线程操作 197
6.1 初探RxJava并发编程 197
6.2 subscribeOn操作 211
6.3 observeOn操作 216
6.4 unsubscribeOn操作 220
6.5 调度器Scheduler 226
6.5.1 Schedulers.newThread方式 227
6.5.2 Schedulers.io方式 227
6.5.3 Schedulers.computation方式 228
6.5.4 Schedulers.from(Executor executor)自定义方式 228
6.6 小结 230
第7章 Flowable与背压 231
7.1 回顾背压 231
7.2 引入Flowable 233
7.3 探索Flowable.create 234
7.3.1 BackpressureStrategy.BUFFER策略 239
7.3.2 BackpressureStrategy.LATEST策略 246
7.3.3 BackpressureStrategy.DROP策略 249
7.4 将一个Observable转化为一个Flowable 251
7.5 通过onBackpressureXXX操作来实现背压策略 252
7.5.1 onBackPressureBuffer操作 255
7.5.2 onBackpressureLatest与onBackpressureDrop操作 256
7.6 Flowable.generate操作 257
7.7 小结 262
第8章 Flowable实战 263
8.1 使用Flowable封装JDBC 263
8.1.1 封装部分查询逻辑 263
8.1.2 封装update逻辑 265
8.2 结合Spring Web应用使用Flowable 268
8.2.1 接口数据的获取 269
8.2.2 响应式服务的源设计 271
8.3 单元测试 274
8.3.1 使用Mock Service Server进行测试 274
8.3.2 使用@Mock来进行一些服务测试 277
8.4 controller层的实现逻辑改造 279
8.5 小结 282

本书勘误

印次
  • 页码:14  •  行数:22  •  印次: 20190601
    public void subscribe(...) {
           subscriber.onSubscribe(new okcerXDemoSubscription(subscriber, executor));
    }
    

    在 有字的22行中,new 对象 的时候,少一个字母 D,请查验。

    小猎人 提交于 2019/6/23 16:40:43
    付睿 确认于 2019/7/26 14:52:20
  • 页码:48  •  行数:24  •  印次: 1

    Object[] currentBuffer;和 int currentIndexInBuffer;两个字段 …
    其实本书这种很多这种格式的既然都是在正文中了,代码的末尾的分号总是多余的,让阅读的思路到分号就断开了,非常不爽的感觉。建议将书中正文部分(非代码块)的这里的分号最好去掉,阅读起来不流畅,很奇怪

    longyc2010 提交于 2019/8/11 20:18:35
    付睿 确认于 2019/11/12 15:20:20

读者评论

推荐用户

同系列书

相关图书

Python一行流:像专家一样写代码

Christian Mayer (作者) 苏丹 (译者)

本书专注于从初学迈向进阶的Python编码技术:如何像专家一样写出优雅、准确、简洁高效的Python 单行代码;阅读任意一行Python 代码时,如何系统性地对...

¥89.00

剑指Offer(专项强化版):数据结构与算法名企面试题精讲

何海涛 (作者)

本书全面、系统地总结了在准备程序员面试过程中必备的数据结构与算法。本书首先详细讨论整数、数组、链表、字符串、哈希表、栈、队列、二叉树、堆和前缀树等常用的数据结构...

¥89.00

C++服务器开发精髓

张远龙 (作者)

本书从操作系统原理角度讲解进行C++服务器开发所需掌握的技术栈。全书总计9章,第1~2章讲解C++ 11/14/17新标准中的常用特性、新增类库,以及C++开发...

 

PHP编程(第4版)

Rasmus Lerdorf(拉斯马斯·勒多夫), Kevin Tatroe(凯文·塔特罗), Peter MacIntyre(彼得·麦金太尔) (作者) 卢涛 (译者)

PHP是一种被广泛使用的Web编程语言,它简单易用,而且与时俱进,不断进化,提升性能。本书基于PHP 7.4,深入介绍 PHP编程技术,涵盖了 PHP 所有基本...

¥109.00

深入理解Spring Cloud与实战

方剑 (作者)

本书共分10章,主要介绍Spring Cloud各个核心组件的设计原理,以及目前流行的Spring Cloud Alibaba和 Netflix组件,并且剖析S...

¥106.00

基于Kotlin的Spring Boot微服务实战

袁康 (作者)

本书介绍了Kotlin在Spring Boot微服务开发中的实践,并使用Kotlin作为开发语言,介绍了函数式编程思想、Kotlin的语法、Kotlin在常用中...

¥69.30