点击上方蓝色“方志朋”,选择“设为星标”

回复“666”获取独家整理的学习资料!

作者 | 陈龙@知乎

来源 | https://www.zhihu.com/question/294282002/answer/521229241

正文如下:

问题: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提出来的,它自己有成功的应用。

热门内容:
  • Java 项目权威排名:Nacos 未上版,Gradle 排名第二,Maven 排名 28

  • 腾讯,干掉 Redis 项目,正式开源、太牛逼啦!

  • 你知道Spring Boot项目是怎么启动的吗?

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ

Spring MVC 过时了吗?相关推荐

  1. jsp过时了吗_知乎高赞:Spring MVC 过时了吗?网友:你连V和C都还没搞明白~

    喜欢就关注我们吧! 问题:Spring MVC 过时了吗? 我看了一下这个问题的日志,这个问题是2018年9月提出来的. 那么好,首先给出结论:Spring MVC没有过时,它仍然是当前主流的Java ...

  2. 阿里P7工作总结:Spring MVC的工作原理,看完受益匪浅

    这篇文章将深入探讨Spring框架的一部分--Spring Web MVC的强大功能及其内部工作原理. 项目安装 在本文中,我们将使用最新.最好的Spring Framework 5.我们将重点介绍S ...

  3. Spring MVC+Spring +Hibernate配置事务,但是事务不起作用

    最近做项目,被一个问题烦恼了很久.使用Spring MVC+Spring +Hibernate开发项目,在使用注解配置事务管理,刚开始发现无论如何数据库都无法更新,但是可以从数据库查询到数据.怀疑是配 ...

  4. Spring MVC 到底是如何工作的

    转载自  Spring MVC 到底是如何工作的 这篇文章将深入探讨Spring框架的一部分--Spring Web MVC的强大功能及其内部工作原理. 这篇文章的源代码可以在GitHub上找到. 项 ...

  5. 使用AspectJ审计Spring MVC Webapp。 第1部分

    如果您像我一样,那么您将拥有那种编程天,一切似乎都进展顺利. 您编写代码和测试,它就可以正常工作. 然后还有其他日子,非常糟糕的日子,在那儿,您知道所编写的所有内容都尽可能正确,并且代码拒绝运行:显然 ...

  6. Spring MVC,Ajax和JSON第1部分–设置场景

    我一直在考虑在Spring,Ajax和JSON上写博客,但是我从来没有做过. 这主要是因为它非常复杂,并且所需的技术一直处于变化状态. 当我决定撰写此博客时,我在Internet上有一个侦察员,如果您 ...

  7. Spring Spring MVC Hibernate 整合备忘

    以下为此三种框架整合配置的详细备注,以及部分问题备忘 项目结构和配置文件可访问 Github 查看 1. pom.xml 尽量使用 Maven 管理项目依赖以减少包引入时的麻烦,以及避免跨开发工具问题 ...

  8. spring mvc中的拦截器

    本文说下spring MVC中的拦截器 文章目录 拦截器介绍 拦截器注入适配器 自定义拦截器 controller测试 测试结果 本文小结 拦截器介绍 拦截器是在servlet执行之前执行的程序(这里 ...

  9. spring mvc 总体概况

    1.配置web.xml 启动springmvc     <!--启动 spring mvc-->     <servlet>           <servlet-nam ...

最新文章

  1. Spring学习(23)--- AOP之Introductions应用
  2. linux内存源码分析 - 内存压缩(同步关系)
  3. poj2976 Dropping tests(01分数规划 好题)
  4. 媒体查询media的3种引入方式
  5. WinServer2003环境下如何配置TortiseSVN(版本控制)服务器端
  6. id nfc模拟_手机NFC也可以刷ID卡门禁?无聊测试居然成功了
  7. 关于IE某些原因导致下拉列表弹出阻止窗口的解决办法
  8. 无向图g的邻接矩阵一定是_矩阵是图
  9. 一年中最后一个月的最后一天说说_一年的最后一天说说
  10. 【小工匠聊Modbus】04-调试工具
  11. iOS-Runtime-Headers
  12. scala学习-scala中:: , +:, :+, :::, +++的区别
  13. 这几天关心加密的人很多
  14. 除了微软默认的ppt服务器外,微软如此解释这一新政。据了解,除了MSN与Skype有很多类似功能之外.ppt...
  15. 【线性代数】矩阵及其运算
  16. matlab 求不规则体积,matlab,求不规则三维图形体积?
  17. android跳一跳作弊编程,跳一跳辅助器作弊刷分 微信跳一跳辅助工具(安卓/iOS苹果)-优基地...
  18. ubuntu Rhythmbox 乱码解决
  19. SV 接口(interface)
  20. 判断两线段相交[nyoj 1016 德莱联盟]

热门文章

  1. 李宏毅机器学习笔记六——Gradient Descent
  2. 【Rsync项目实战一】备份全网服务器数据
  3. 有关 drop delete truncate 问题
  4. java web中文乱码处理笔记
  5. 重温Thinking in java
  6. 大宗商品(Bulk Stock)交易
  7. 【Java】Linux下安装配置Oracle JDK 1.7版本
  8. Task02:青少年软件编程(Scratch)等级考试模拟卷(一级)
  9. 中国电子学会图形化四级编程题:绘制雪花
  10. 题目 1471:【蓝桥杯】【入门题】【基础练习VIP】矩形面积交