⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 zhihu.com/question/294282002/answer/521229241 「陈龙@知乎」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

正文如下:

问题:Spring MVC 过时了吗?

我看了一下这个问题的日志,这个问题是2018年9月提出来的。

那么好,首先给出结论:Spring MVC没有过时,它仍然是当前主流的Java Web开发框架。但是,在这个时间点谈论这个问题就有点意思了。题主提出这个问题的时候,可能都没有意识到这个问题正处在Web开发思想变革的分水岭上。

首先,说一下答主这个问题描述中不准确的地方,后面再着重说说现在的分水岭。

现在jsp似乎已经渐渐淡出大家的视野。web开发朝着前后端分离的方向去了

这个没错。但是,

像spring mvc这样前后端耦合较大的框架是否过时了?

这个疑问就没有必要了。

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) {
// ...
}
}

前后端分离,没有JSP或其他服务器端模板引擎,只有HTTP上传输的JSON交互,那么必然用@RestController。JSON是服务器端MVC框架的V,是前端MVC框架的M。

--------------重点开始-------------

下面说一下为什么现在这个问题比较有意思了。

因为从Spring 5开始,大量引入了Reactive概念,也就是响应式思想!!!

所以,Spring 4及以前版本长期存在的Spring MVC有了一个并列同时存在的新的编程模型,Spring WebFlux。

图片

上图,左侧是新的Spring WebFlux,可以看出一切都是Reactive的。右侧是我们熟悉的Spring MVC,是基于Servlet API的。

这个问题下的其他回答,竟然还在问:

那你是觉得哪个框架替代了Spring MVC?

你能找出其他框架来代替它吗?如果没有,那就没有过时

你们最近半年访问过Spring 官网首页吗?

特别是2018的Spring One大会,大家注意到了吗?看一下所有的话题(session),多少题目里都包含了Reactive:

参考:https://springone.io/2018/sessions

所以,如果Spring认定了Reactive是趋势的话,传统的Spring MVC应该是处于Deprecated状态。上图中两种模型可能会长期并存,但是Spring 6以后就不好说了~

在今年的Spring One大会上,Spring提出了一整套Reactive技术,Spring 自己称作Reactive Revolution:

参考:https://spring.io/blog/2018/09/27/the-reactive-revolution-at-springone-platform-2018-part-1-n

还有更多的Reactive思想涌现出来了,大家要保持关注。

图片

不仅仅是服务器端,前端的Reactive也很活跃,例如Rxjs。

正如Spring自己定义的那样,现在是一场Reactive Revolution,这场思想革命波及Web开发的全栈,数据库=>服务器=>前端。

所以,此时想一下Spring MVC是否过时是个很有意思的问题。它仍是最主流最成熟的Java服务器端MVC框架,但它并不代表Web进化的方向。

评论区有人提到Vert.x。到目前Vert.x也只是个tool-kit,不适一整套框架。现在技术讲求的是生态环境,Spring现在基本上是占有生态优势,有Spring MVC的普及率。不管Spring MVC还是Web Flux,都能融入这个生态,Spring Boot都会给予先天的支持。

回复@无忧

编程首先思想活动,然后才是敲代码。学习编程的语言、框架等等,首先是思想跟上。比如前端用惯了JQuery的人,直接操作DOM,让他们学习Angular、VUE这总双向绑定,肯定也会觉得反直觉。但是说到底,思想在进步,落后的思想就会觉得先进思想反直觉。民国时期,多少人看到女人穿泳衣游泳也觉得反直觉,但是现在都是正常的。

生态也不是一天建成的,如果是个小团队提出的框架,我可能觉得会凉。但是以Spring多少年在Web开发上的积淀,然后能够自我革新提出Webflux,并且打算建立一整套Reacitve生态,我觉得成为主流还是很有可能的。还是拿前端的例子来说,为啥大家十年如一日JQuery用的好好的,然后接受Angularjs的双向绑定,因为首先是Google提出来的,它自己内部就有大量应用。为啥Angularjs用的好好的,突然又开始用React的Virtual DOM?因为首先是Facebook提出来的,它自己有成功的应用。

看完这篇文章,你觉得Spring MVC会过时吗?

文章目录
  1. 1. 问题:Spring MVC 过时了吗?
  2. 2. --------------重点开始-------------
  3. 3. 回复@无忧