Spring MVC 過(guò)時(shí)了嗎?
作者:陳龍
zhihu.com/question/294282002/answer/521229241
正文如下:
問(wèn)題:Spring MVC 過(guò)時(shí)了嗎?
我看了一下這個(gè)問(wèn)題的日志,這個(gè)問(wèn)題是2018年9月提出來(lái)的。
那么好,首先給出結(jié)論:Spring MVC沒(méi)有過(guò)時(shí),它仍然是當(dāng)前主流的Java Web開(kāi)發(fā)框架。但是,在這個(gè)時(shí)間點(diǎn)談?wù)撨@個(gè)問(wèn)題就有點(diǎn)意思了。題主提出這個(gè)問(wèn)題的時(shí)候,可能都沒(méi)有意識(shí)到這個(gè)問(wèn)題正處在Web開(kāi)發(fā)思想變革的分水嶺上。
首先,說(shuō)一下答主這個(gè)問(wèn)題描述中不準(zhǔn)確的地方,后面再著重說(shuō)說(shuō)現(xiàn)在的分水嶺。
現(xiàn)在jsp似乎已經(jīng)漸漸淡出大家的視野。web開(kāi)發(fā)朝著前后端分離的方向去了
這個(gè)沒(méi)錯(cuò)。但是,
像spring mvc這樣前后端耦合較大的框架是否過(guò)時(shí)了?
這個(gè)疑問(wèn)就沒(méi)有必要了。
Spring MVC前后端耦合不大啊。你完全可以使用@RestController。
@RestControlleris a specialized version of the controller. It includes the @Controller and @ResponseBody annotations and as a result, simplifies the controller implementation:
@RestController
@RequestMapping("books-rest")
public class SimpleBookRestController {
@GetMapping("/{id}", produces = "application/json")
public Book getBook(@PathVariable int id) {
return findBookById(id);
}
private Book findBookById(int id) {
// ...
}
}
前后端分離,沒(méi)有JSP或其他服務(wù)器端模板引擎,只有HTTP上傳輸?shù)腏SON交互,那么必然用@RestController。JSON是服務(wù)器端MVC框架的V,是前端MVC框架的M。
重點(diǎn)開(kāi)始
下面說(shuō)一下為什么現(xiàn)在這個(gè)問(wèn)題比較有意思了。
因?yàn)閺腟pring 5開(kāi)始,大量引入了Reactive概念,也就是響應(yīng)式思想!?。?/p>
所以,Spring 4及以前版本長(zhǎng)期存在的Spring MVC有了一個(gè)并列同時(shí)存在的新的編程模型,Spring WebFlux。

上圖,左側(cè)是新的Spring WebFlux,可以看出一切都是Reactive的。右側(cè)是我們熟悉的Spring MVC,是基于Servlet API的。
這個(gè)問(wèn)題下的其他回答,竟然還在問(wèn):
那你是覺(jué)得哪個(gè)框架替代了Spring MVC?
你能找出其他框架來(lái)代替它嗎?如果沒(méi)有,那就沒(méi)有過(guò)時(shí)
你們最近半年訪問(wèn)過(guò)Spring 官網(wǎng)首頁(yè)嗎?
特別是2018的Spring One大會(huì),大家注意到了嗎?看一下所有的話題(session),多少題目里都包含了Reactive:
參考:https://springone.io/2018/sessions
所以,如果Spring認(rèn)定了Reactive是趨勢(shì)的話,傳統(tǒng)的Spring MVC應(yīng)該是處于Deprecated狀態(tài)。上圖中兩種模型可能會(huì)長(zhǎng)期并存,但是Spring 6以后就不好說(shuō)了~
在今年的Spring One大會(huì)上,Spring提出了一整套R(shí)eactive技術(shù),Spring 自己稱作Reactive Revolution:
參考:https://spring.io/blog/2018/09/27/the-reactive-revolution-at-springone-platform-2018-part-1-n
還有更多的Reactive思想涌現(xiàn)出來(lái)了,大家要保持關(guān)注。
不僅僅是服務(wù)器端,前端的Reactive也很活躍,例如Rxjs。
正如Spring自己定義的那樣,現(xiàn)在是一場(chǎng)Reactive Revolution,這場(chǎng)思想革命波及Web開(kāi)發(fā)的全棧,數(shù)據(jù)庫(kù)=>服務(wù)器=>前端。
所以,此時(shí)想一下Spring MVC是否過(guò)時(shí)是個(gè)很有意思的問(wèn)題。它仍是最主流最成熟的Java服務(wù)器端MVC框架,但它并不代表Web進(jìn)化的方向。
評(píng)論區(qū)有人提到Vert.x。到目前Vert.x也只是個(gè)tool-kit,不適一整套框架。現(xiàn)在技術(shù)講求的是生態(tài)環(huán)境,Spring現(xiàn)在基本上是占有生態(tài)優(yōu)勢(shì),有Spring MVC的普及率。不管Spring MVC還是Web Flux,都能融入這個(gè)生態(tài),Spring Boot都會(huì)給予先天的支持。
回復(fù)@無(wú)憂
編程首先思想活動(dòng),然后才是敲代碼。學(xué)習(xí)編程的語(yǔ)言、框架等等,首先是思想跟上。比如前端用慣了JQuery的人,直接操作DOM,讓他們學(xué)習(xí)Angular、VUE這總雙向綁定,肯定也會(huì)覺(jué)得反直覺(jué)。但是說(shuō)到底,思想在進(jìn)步,落后的思想就會(huì)覺(jué)得先進(jìn)思想反直覺(jué)。民國(guó)時(shí)期,多少人看到女人穿泳衣游泳也覺(jué)得反直覺(jué),但是現(xiàn)在都是正常的。
生態(tài)也不是一天建成的,如果是個(gè)小團(tuán)隊(duì)提出的框架,我可能覺(jué)得會(huì)涼。但是以Spring多少年在Web開(kāi)發(fā)上的積淀,然后能夠自我革新提出Webflux,并且打算建立一整套R(shí)eacitve生態(tài),我覺(jué)得成為主流還是很有可能的。還是拿前端的例子來(lái)說(shuō),為啥大家十年如一日J(rèn)Query用的好好的,然后接受Angularjs的雙向綁定,因?yàn)槭紫仁荊oogle提出來(lái)的,它自己內(nèi)部就有大量應(yīng)用。為啥Angularjs用的好好的,突然又開(kāi)始用React的Virtual DOM?因?yàn)槭紫仁荈acebook提出來(lái)的,它自己有成功的應(yīng)用。
看完這篇文章,你覺(jué)得Spring MVC會(huì)過(guò)時(shí)嗎?
推薦閱讀
說(shuō)實(shí)話!你知道 Java 中的回調(diào)機(jī)制嗎?
