(先寫目標:不要求自己會寫,只要幾個常見的寫法自己能看明白不耽誤查資料就行了,看這個是為了學過濾器里面的那些東西。)
1. 和原來的阻塞式編程的對應關系
返回值,原來返回List<xxxx>的地方變成Flux<xxxx>,原來返回單個對象的地方變成Mono<xxxx>。
Flux就是List的一種變式,Mono表示單個對象。
- 由于WebFlux 是響應式的, 所以從DAO 到Service 再到 Controller ,層層之間都必須是響應式的,層與層之前數據交互處理都只能是Mono和Flux,這樣就導致了很多阻塞式的框架無法使用,所以傳統(tǒng)的關系型數據庫框架(JDBC、JPA) 都無法使用(其實已經有了RxJDBC,但是要你去直接操作JDBC,太麻煩了)。
(只要跟數據庫相關的,基本都沒有辦法搞響應了)
3. Mono的三個階段
(由于Mono和Flux這兩個意思差不多,所以只針對于Mono就可以了)
(1) Mono創(chuàng)建
首先是Mono.just(),直接由這個對象構造出一個Mono。
然后Mono.fromRunnable(),用一個線程來構建一個Mono。
(2) Mono中間處理階段
flatMap(把一個Mono處理一下變成另一個Mono,意思是這后面可以接著加點什么什么,繼續(xù)鏈式處理)
Map(這個Mono直接就變成了普通對象,后面接不上了)
then(這個只是時間上的先后,并不是邏輯上的處理先后,就是then處理前后并不是一個變量,then接收一個變量,然后then前面處理的那個就結束了,后面開始處理then接收的這個變量)
(3) Mono結束
這個基本不用你管,你只要返回一個Mono對象,Spring自動就幫你處理后續(xù)的。