話說Spring WebFlux已經出現有一段時間了,但是知道他的人並不是很多。這讓他很是悶悶不樂。
還有更慘的是,那些敢於吃螃蟹的人在嘗試了他之后,有的竟把代碼重新改回到Spring MVC的同步模式。
Spring WebFlux一方面反思自己,一方面決定化身為一家西餐廳,慢慢向周邊老百姓推銷自己。
風聲傳到了Spring MVC耳朵里,他決定前去試探一番,看看這個同父異母的兄弟和自己到底有什么不同。
為了不讓人認出他,MVC喬裝打扮一番,就出門了。
大老遠就看到那家西餐廳別具一格,略顯高檔。到跟前一看,果然窗明幾凈,門頭上赫然醒目地寫着WebFlux幾個大字。
MVC推門而入,確實有些冷清,於是就自己找個地兒坐下來,心不在焉的翻翻菜單。
此時過來一個人,看樣子像個小領導。“先生,請問您要點些什么”,這人問道。MVC心想,這西餐廳就是講究,連用語都這么規范。不像我們MVC那里,都土得掉渣,上來就是嚷嚷。
“來份花生米,一瓶啤酒”,MVC習慣性地答道。只見這位小領導強咬着牙,憋住不笑,但眼睛里卻射出鄙夷的目光。
MVC心想這個小領導一定在嘲笑自己,覺得MVC的人天天寫同步代碼,Low逼的要命,現在來到了NB的響應式web世界里,居然連個菜都點不好。
不過,這個小領導還是很紳士地道,“不好意思,先生,我們這是西餐廳,暫時不提供您要的東西”。MVC看到這個小領導身上別着一個工作牌,上面寫着,職位:大堂經理,姓名:DispatcherHandler。
MVC以前聽別人說過,西餐廳都是賣牛排的。於是道,“給我來個牛排吧,再來一杯紅酒”。
大堂經理本來想問他要什么種類的牛排,什么牌子的紅酒。話到嘴邊又被咽了回去。問一個土老帽這問題,簡直就是對牛彈琴啊。但是表情動作都已到位,總不能再收回去吧。
就問道,“牛排您要幾分熟”。MVC道,“牛排共有幾面”。大堂經理道,“2面”。MVC道,“一面八分熟,一面九分熟,中間七分熟”。心想,我也好好為難為難這家伙,響應式你就NB了啊。
意外的是,大堂經理一點不生氣,只是把菜單寫好,然后叫了一個人出來,把菜單交給他,說接下來由他為我服務,自己就走了。
這是一位年輕帥氣的小伙,人顯得特別干練精神。對MVC道,“先生,您好,我要再確認下你的菜單,以免出錯”。MVC表示可以。
確認無誤后,小伙說道,“請您在這稍等片刻”。然后他拿着菜單就走了。
只見小伙來到一個桌子前,把菜單放到桌子上。然后抱起一本大大的書,上面寫着“廚師花名冊”。MVC心想,這小伙該不會是為我選廚師吧。
只見小伙一會看菜單,一會翻書,好像確實是在比對,根據菜單匹配廚師。不一會小伙就合上了書,對着耳麥說了些什么,就朝MVC走了過來。
MVC看到小伙胸前也別着一個工作牌,上面寫着,職位:服務顧問,姓名:HandlerMapping。這位服務顧問道,“先生,我已經為您甄選了一位最適合您的廚師,一會就來”。
片刻功夫,來了兩個人,服務顧問說接下來由這兩位為我服務,然后把菜單交給那兩位,他就走了。
MVC明白了,只要看身上的工作牌,就知道他們是干什么的了。這兩位一個人身上的工作牌寫着,職位:西餐廚師,姓名:Handler。另一個人身上的工作牌寫着,職位:廚師助理,姓名:HandlerAdapter。MVC心想,原來是一個大廚和一個伙計。
這位廚師,強顏歡笑,實則內心緊張,不會是新東方剛畢業的吧,怎么那么像老俞,哈哈。
倒是這個助理,有點小浪的介紹到,“這位是您本次的私人廚師,我是他的助理,我們會一起為您烹飪制作”。MVC哪享受過這種服務啊,連忙笑道,“好,好,好”。
MVC見廚師和助理進了操作間,按菜單先拿出菜譜,然后挑選食材,整理食材,最后開始制作。
聽着輕柔的音樂,MVC漸漸地走了神,不知在想些什么。聽到茲拉茲啦的聲音,MVC回過神來,原來牛排煎好了。
本以為該端出來了,實際卻沒有,而是交給了另外一個人。
MVC有了經驗,先看胸部,那里別着工作牌呢,只是這次為啥角度這么陡峭呢,隱約看到,職位:形象大使,姓名:HandlerResultHandler。MVC順着往上一看,哦,什么,原來是個女的。
只見形象大使拿到煎好的牛排后,切去多余的邊邊角角,然后又切成整齊的小塊,在盤子里擺了一個非常漂亮的造型,旁邊澆上胡椒汁,上頭放上一朵鮮艷的小花,再倒上一杯紅酒。
踩着柔和的音樂,邁着輕盈的步伐,穿着時尚的短裙,甩着波浪的秀發,畫着漂亮的淡妝,帶着甜蜜的微笑。左手端着牛排,右手握着紅酒,像德芙般絲滑。(本段純屬娛樂)
MVC瞪大了雙眼,張大了嘴巴,哆嗦着雙腿,顫抖着雙手,心想,就算再成功的人士,也不過如此吧。一不小心,口水流了出來,只是不知道為誰而流,為餐,還是為秀色可餐?
“先生,這是您點的餐,請慢用”,形象大使留下這優美動聽的一句話,轉身離去,不一會連背影也消失了。只有這婉轉悠揚的話語在空氣中回盪,令MVC激動的內心久久無法平靜。
不知過了多久,MVC終於清醒了。看着眼前的牛排和紅酒,感慨到,這哪里是食品,明明就是藝術品啊。
用叉子扎了一塊牛排,放到嘴里,嚼了兩下,怎么有點生啊。他已全然忘記自己點的是七分熟的。
再看看這葡萄美酒,紅彤彤的,晶瑩剔透,很是誘人。就端起酒杯喝了一口,怎么又酸又澀,簡直難以下咽。
MVC嘆氣道,這響應式的世界確實很美很精彩很刺激,但是對於我們這些祖祖輩輩生活在同步阻塞世界的老百姓來說,一時間還真是適應不了,難以接受。
為什么我們非要接受他呢?他喝他的咖啡,我吃我的大蒜,兩者相安無事,但又各有所長,這不挺好的嘛。想到此,MVC也逐漸坦然了。
MVC剛要起身去結賬,大堂經理走了過來,“先生,我們的餐食和服務您還滿意吧”。“形象大使真的很漂亮”,MVC嘴一禿嚕,竟把內心的實話說了出來,慌忙補充道,“飯菜也不錯,飯菜也不錯”。
大堂經理繼續道,“恭喜您成為我們開業以來第100位顧客,給您免單啦”。MVC覺得自己很幸運,連忙道謝。“要不要免費給您辦張會員卡,以后都打八折”,MVC最終也婉言拒絕,因為他知道自己可能不會再來這個水土不服的地方。
MVC起身離開,推門而出,偉岸的身影不一會消失在濃濃的霧霾中。
坐在二樓的WebFlux看到眼前的這一切,內心五味雜陳。我選用頂級的食材,頂級的團隊,為你打造頂級的料理,你卻無福消受。
其實Spring把WebFlux打造出來,不是為了取代MVC,也不是讓所有的MVC都轉向WebFlux,而是為了讓用戶按需選擇。
所以WebFlux完全支持MVC那套基於注解的編程模式,MVC也支持WebFlux的部分功能,它們是可以一起聯合使用。
因為Spring對它們底層的實現邏輯可以說是如出一轍,如圖:
哈哈,本文就是根據這張圖虛構出來的,你能把故事中的人物對號入座嗎,哈哈。
習慣了同步阻塞模式,一下子到響應式確實稍微不適應,其實主要是思維轉不過來。
后面會寫一篇實操性的文章,來幫助扭轉思維。敬請關注。
(完)
編程新說
用獨特的視角說技術