Java编程方法论 响应式RxJava与代码设计实战
作者: 知秋著
出版时间: 2019年版
内容简介
本书对RxJava 2的源码进行了深入解读,让读者可以从设计到实现细节上全面了解它,从而达到不仅会用而且可以进行RxJava 2源码库组件级别的拓展的程度。本书的目的不仅是介绍RxJava 2,而且更希望通过一个成熟、优秀的代码库来向读者展示阅读源码的思路及编程方面的技巧,其中包含了并发编程的实战技巧、数据结构的设计方法、设计模式的使用方法、函数式编程的各种技巧等,希望读者可以深入思考并获得属于自己的一套编程方法论。这也是“Java编程方法论系列丛书”的初衷,授之以鱼不如授之以渔。
目录
第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