Spring MVC和Spring Boot的区别

279

我刚开始学习Spring。在我的下一步中,我想开发更大型的Web应用程序。

现在我在想,我应该从Spring Boot还是Spring MVC开始。我已经阅读了一些资料,但因为两者看起来相似而感到困惑。

那么它们之间有什么区别呢?

11个回答

387
  • Spring MVC是一个完整的基于HTTP的MVC框架,由Spring Framework管理并基于Servlets。在JavaEE堆栈中,它相当于JSF。其中最受欢迎的元素是使用@Controller注释的类,在这些类中实现了可以通过不同HTTP请求访问的方法。它还有一个等效的@RestController用于实现基于REST的API。
  • Spring boot是一个快速设置应用程序的实用工具,提供开箱即用的配置,以构建Spring动力应用程序。正如您所知,Spring在其范围下集成了各种不同的模块,如spring-corespring-dataspring-web(顺便说一下,其中包括Spring MVC)等等。使用此工具,您可以告诉Spring要使用多少个模块,并为它们快速设置(稍后您可以自己更改它们)。

所以,Spring MVC是用于Web应用程序的框架,而Spring Boot是基于Spring的生产就绪项目初始化器。您可能会发现访问SO中的Spring MVC标签wiki以及Spring Boot标签wiki非常有用。


37
没错,Spring Boot只是一个自动配置工具(作为框架打包)。Spring MVC是Web框架。 - Plain_Dude_Sleeping_Alone
2
这是否意味着Spring Boot仅用于控制器返回和发布JSON时显示视图(HTML)页面,如果我想使用视图来显示HTML,则必须使用Spring MVC? - Osama Al-Banna
2
Spring MVC是一种视图层技术,它基本上处理HTTP请求和响应,充当控制器(对于HTML,您可以将其与thymeleaf结合使用,例如,对于REST+JSON,请直接使用它,因为JSON转换是使用集成的Jackson完成的)。Spring Boot集成了整个Spring项目(MVC+Data+Core...),并提供了一个快速生产就绪的配置来使用它们。 - Aritz
4
иҝҷжҳҜеҗҰж„Ҹе‘ізқҖжҲ‘еҸҜд»ҘдҪҝз”ЁSpring Bootй…ҚзҪ®жҲ‘зҡ„Webеә”з”ЁзЁӢеәҸпјҢ然еҗҺдҪҝз”ЁSpring MVCе®һзҺ°WebеҠҹиғҪпјҹ - Mike
1
@Mike 当然可以。 - Aritz

127

Spring MVCSpring Boot 在其他回答中已经有了详细描述,因此,我不再重复,直接进入具体内容。 Spring BootSpring MVC 不是可比较的或相互排斥的。如果您想使用 Spring 进行 Web 应用程序开发,则无论如何都要使用 Spring MVC。您的问题变成了是否使用 Spring Boot

对于开发普通的 Spring 应用程序或开始学习 Spring,我认为建议使用 Spring Boot。它极大地简化了工作,已准备好投入生产,并且正在迅速被广泛采用。

有时我看到初学者会问这个问题,因为在 STS(Spring Tool Suite)中有两个向导:一个用于创建 Spring Boot 项目,另一个用于创建 Spring MVC 项目。因此,我的建议是创建一个 Spring Boot 项目并在其中选择 Web 作为模块。


1
当您使用spring-boot(带有spring-data-rest和spring-web)时,您在这里使用MVC原则,对吗? 我只是有些困惑,因为我认为Spring MVC是唯一使用MVC-Model的Spring版本。 - watchme
7
spring-web就是spring-mvc模块。 - Sanjay
1
+1 的意思是“因此,我的建议是创建一个Spring Boot项目,并选择Web作为其中的模块。” - Junaed

53

简单来说:

Spring Boot = Spring MVC + 自动配置(无需编写spring.xml文件进行配置)+ 服务器(可以使用嵌入式Tomcat、Netty、Jetty服务器)。

而且,Spring Boot 是一种有观点的框架,因此它的构建考虑到快速开发,减少配置时间,并拥有非常好的社区支持。


抱歉,请允许我问一个初学者的问题。既然Spring Boot可以覆盖Spring MVC,为什么我们还需要使用Spring MVC呢? - Panadol Chong
@PanadolChong,Spring MVC仍然被用于一些遗留应用程序中,而Spring Boot在大多数配置方面都是自动完成的,因此为了更好地理解内部工作原理,Spring MVC可能会有所帮助。现在主要使用Spring Boot,因为它可以容纳Spring MVC的所有功能。 - Bishal Jaiswal

25
  • Spring Boot is a framework built on top of Spring which aims to simplify the process of creating and deploying standalone Spring-based applications.
  • Spring Boot comes with many preconfigured settings, reducing the need for manual configuration and boilerplate code.
  • Provides embedded servers like Tomcat, Jetty, and Undertow for easy deployment without requiring a separate web server installation.
  • Offers Actuator which provides insight into the running application's health, metrics, and other information out of the box.
  • 创建快速应用程序,将单个大型Web应用程序分解成具有自己范围和功能的不同微服务。
  • 使用Web Jar进行自动配置:在普通Spring中有很多配置,例如DispatcherServlet、Component Scan、View Resolver、Web Jar、XMLs。(例如,如果我想配置数据源、实体管理器、事务管理器工厂)。当类路径不可用时,自动配置。
  • 配备默认的Spring Starters,其中包含一些默认的Spring配置依赖项(如Spring Core、Web-MVC、Jackson、Tomcat、验证、数据绑定、日志记录)。也不必担心版本问题。
  • (演变:Spring -> Spring MVC -> Spring Boot,因此新版本具有旧版本功能的兼容性。) 注意: 这并不包含所有要点。


    20

    Spring MVC是Spring框架的一个子项目,旨在设计和开发使用MVC(Model-View-Controller)模式的应用程序。Spring MVC的设计完全与Spring框架以及大多数其他子项目相集成。

    Spring Boot可以从Spring工程团队的这篇文章中很好地理解。它被认为是有偏见的,即它大力倡导一种快速开发的特定风格,但它设计得足够好,可以适应某些情况下对规则的例外处理。简而言之,它是一种约定优于配置的方法论,愿意理解您在必要时打破约定的需求。


    12

    SpringBoot实际上是预配置的,减少了模板配置,为开始应用程序提供了最简单或最快捷的方式。

    SpringBoot将配置的烦恼从开发人员转移到自己身上,而不是Spring。

    隐式地,SpringBoot基于Spring框架的概念,如bean、controller、services、jpa等。

    你可以说SpringBoot是Spring的包装器。

    在SpringBoot中,默认情况下Server的端口是8080,但如果您想更改端口,请转到您的application.properties文件并编写

    server.port=8084


    11
    • 使用Spring Boot,你将不需要构建配置,当你创建项目时,这一切都会自动完成。

    • 如果你使用Spring MVC,你需要自己构建配置。虽然更加复杂,但这是至关重要的。


    简单而优雅的澄清 - Sritam Jagadev

    9

    这样来想:

    Spring MVC是一个面向Web的框架,用于实现MVC架构。

    Spring Boot是一种面向程序员的工具。程序员应该专注于编程,而工具则应专注于配置。因此,我们不需要浪费时间配置大量的XML文件来创建一个简单的“Hello world”应用。


    9

    不重复之前的回答,
    我写这篇回答是为了那些想要开始新项目但不知道哪个框架最好的人。 如果你是这个框架的初学者,我推荐使用spring boot(与STS /Spring Tool Suite一起使用)。因为它非常有帮助。它自动完成所有配置。此外,使用Hibernate作为数据库框架与spring-boot结合使用。这样的组合将使您的应用程序变得更好。我的经验可以保证。

    即使这是目前JEE中最好的框架之一,但它在不久的将来会逐渐消失。轻量级的替代方案正在出现。所以要随时更新你的经验,不要固守某一个特定的框架。最好的方法是掌握概念,而不是框架。


    6

    Spring MVC和Spring Boot存在不同的目的。因此,将它们作为竞争对手进行比较是不明智的。

    什么是Spring Boot?

    Spring Boot是一种框架,可以使用合理的默认值打包Spring应用程序。这是什么意思?假设您正在使用Spring MVC、Spring Data、Hibernate和Tomcat开发Web应用程序。如何将此应用程序打包并部署到Web服务器上?目前为止,我们必须手动编写配置、XML文件等以部署到Web服务器。

    Spring Boot为您在项目中提供零XML配置。相信我,您不需要部署描述符、Web服务器等。Spring Boot是一个神奇的框架,为您捆绑所有依赖项。最终,您的Web应用程序将成为一个带有内嵌服务器的独立JAR文件。

    如果您仍然困惑于此工作原理,请阅读有关使用Spring Boot开发微服务框架的文章。

    什么是Spring MVC?

    它是一种传统的Web应用程序框架,可帮助您构建Web应用程序。它类似于Struts框架。

    Spring MVC是一种Java框架,用于构建Web应用程序。它遵循模型-视图-控制器设计模式。它实现了核心Spring框架的所有基本功能,如控制反转、依赖注入。

    Spring MVC通过DispatcherServlet的帮助提供了在Spring框架中使用MVC的优雅解决方案。这里,DispatcherServlet是一个接收传入请求并将其映射到正确资源(例如控制器、模型和视图)的类。

    我希望这能帮助您理解差异。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接