【问题标题】:Spring MVC 和 Spring Boot 之间的区别
【发布时间】:2015-12-31 14:14:29
【问题描述】:

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

现在我想知道我应该从 Spring Boot 还是 Spring MVC 开始。我已经读过一些东西,但这很令人困惑,因为两者看起来很相似。

那么这两者有什么区别呢?

【问题讨论】:

    标签: spring spring-mvc spring-boot


    【解决方案1】:

    为了补充一点,Java Spring 是一个框架,而 Java Spring Boot 是一个附加组件,通过提供预配置和/或易于使用的组件来加速它。 始终建议在跳到 Java Spring Boot 之前先了解 Java Spring 的基本概念。

    【讨论】:

      【解决方案2】:

      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 是一个用于构建 Web 应用程序的 Java 框架。它遵循模型-视图-控制器设计模式。它实现了核心 spring 框架的所有基本功能,例如控制反转、依赖注入。

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

      我希望这可以帮助您了解其中的区别。

      【讨论】:

        【解决方案3】:

        不要在以前的答案中重复同样的事情,
        我正在为那些希望开始一个新项目并且不知道哪个是启动项目的最佳框架的人写这个答案。 如果您是这个框架的初学者,我最喜欢的最好方法是使用 spring boot(使用 STS /Spring Tool Suite)。因为它有很大帮助。它自己完成所有配置。此外,将 Hibernate 与 spring-boot 一起用作数据库框架。使用这种组合,您的应用程序将是最好的。我可以用我的经验来保证。

        即使这是 JEE(目前)最好的框架之一,它也会在不久的将来消亡。有轻量级的替代品出现。因此,请随时了解您的经验,不要拘泥于一个特定的框架。最好的事情是精通概念,而不是框架。

        【讨论】:

          【解决方案4】:

          这是区分 Spring、Spring MVC 和 Spring Boot 的一些要点:

          春天:

          1. 主要区别在于“测试能力”。
          2. 弹簧带有 DI 和 IOC。通过系统完成的所有艰苦工作,我们不需要做任何类型的工作(例如,通常我们手动定义类的对象,但通过 Di 我们只需使用 @Service 或 @Component 进行注释 - 匹配类管理这些)。
          3. 通过@Autowired 注释,我们可以在单元测试时轻松地模拟()它。
          4. 复制和管道代码。在 JDBC 中,我们多次编写相同的代码来执行任何类型的数据库操作 Spring 通过 Hibernate 和 ORM 解决了这个问题。
          5. 与其他框架的良好集成。像 Hibernate、ORM、Junit 和 Mockito。

          Spring MVC

          1. Spring MVC 框架是 Spring 的模块,它提供了面向 HTTP 的 Web 应用程序开发工具。
          2. Spring MVC 在输入逻辑(控制器)、业务逻辑(模型)和 UI 逻辑(视图)上有清晰的代码分离。
          3. Spring MVC 模式有助于开发灵活且松散耦合的 Web 应用程序。
          4. 提供各种硬编码方式来根据您的需要定制您的应用程序。

          春季启动:

          1. 创建快速应用程序,这样我们就无需管理单个大型 Web 应用程序,而是将它们单独划分为具有自己范围和功能的不同微服务。
          2. 使用 Web Jar 进行自动配置:在正常的 Spring 中,有很多配置,例如 DispatcherServlet、组件扫描、视图解析器、Web Jar、XML。 (例如,如果我想配置数据源,Entity Manager Transaction Manager Factory)。使用类路径不可用时自动配置。
          3. 带有默认的 Spring Starters,它带有一些默认的 Spring 配置依赖项(如 Spring Core、Web-MVC、Jackson、Tomcat、Validation、Data Binding、Logging)。也不用担心版本控制问题。

          (进化类似:Spring -> Spring MVC -> Spring Boot,因此新版本具有旧版本功能的兼容性。) 注意:它不包含所有点。

          【讨论】:

            【解决方案5】:

            这样想:

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

            Spring Boot 是面向程序员的工具。程序员必须专注于编程,工具必须专注于配置。所以我们不需要浪费时间配置一堆 xml 来制作一个简单的“Hello world”。

            【讨论】:

              【解决方案6】:

              简单来说可以这样表述:

              Spring boot = Spring MVC + Auto Configuration(Don't need to write spring.xml file for configurations) + Server(You can have embedded Tomcat, Netty, Jetty server).

              而且 Spring Boot 是一个 Opinionated 框架,所以它的构建考虑到了快速开发、更少的配置时间和非常好的社区支持。

              【讨论】:

              • 对不起,请允许我问一个初学者问题。为什么我们仍然需要使用 Spring MVC,因为 Spring boot 可以覆盖它?
              • @PanadolChong 容纳 Spring MVC 仍然在一些遗留应用程序中使用,并且 Spring boot 完成了大部分配置,以便更好地了解内部工作方式,Spring MVC 可能会有所帮助。大多数情况下,现在使用 Spring Boot,因为它可以容纳 Spring MVC 所做的所有功能。
              【解决方案7】:
              • Spring MVC 是一个完整的面向 HTTP 的 MVC 框架,由 Spring Framework 管理并基于 Servlet。它相当于 JavaEE 堆栈中的 JSF。最受欢迎 其中的元素是用@Controller 注释的类, 您可以在其中实现可以使用不同 HTTP 请求访问的方法。它有一个等效的 @RestController 来实现基于 REST 的 API。
              • Spring boot 是一个用于快速设置应用程序的实用程序,提供开箱即用的配置以便构建 弹簧驱动的应用程序。如您所知,Spring 集成了 its umbrella 下的各种不同模块,如 spring-corespring-dataspring-web(顺便说一下,其中包括 Spring MVC)等等。使用此工具,您可以告诉 Spring 要使用多少个,您可以快速设置它们(您可以稍后自行更改)。

              因此,Spring MVC 是一个用于 Web 应用程序的框架,而 Spring Boot 是一个基于 Spring 的生产就绪项目初始化程序。访问 SO 中的 Spring MVC tag wikiSpring Boot tag wiki 可能会对您有所帮助。

              【讨论】:

              • 是的 _+1,Spring boot 只是一个自动配置工具(打包为框架)。 Spring mvc 是 web 框架
              • 这是否意味着 Spring Boot 仅用于显示视图 (HTML) 页面以用于控制器返回和发布 JSON ,如果我想使用视图显示 HTML 我必须使用 Spring MVC ?
              • @OsamaAl-Banna Spring MVC 是一种视图层技术,它基本上处理 HTTP 请求-响应,充当控制器(对于 HTML,您可以将其与 thymeleaf 结合,例如,对于 REST+JSON ,按原样使用,因为 JSON 转换是使用集成的 Jackson 完成的)。 Spring Boot 集成了整个 Spring 伞形项目(MVC+Data+Core...),并提供了一个快速生产就绪的配置来使用它们。
              • 这是否意味着我可以使用Spring Boot 配置我的Web 应用程序,然后使用Spring MVC 实现Web 功能?
              • @Mike 确实如此
              【解决方案8】:

              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 作为其中的一个模块。

              【讨论】:

              • 当你使用 spring-boot(带有 spring-data-rest 和 spring-web)时,你这里有 MVC 原理,对吧?我只是感到困惑,因为我认为 Spring MVC 是唯一使用 MVC 模型的 Spring 版本。
              • spring-web 只不过是 spring-mvc 模块
              • +1 表示“所以,我的建议是创建一个 Spring Boot 项目并在其中选择 Web 作为模块。”
              【解决方案9】:
              • 使用 Spring Boot,您无需构建配置。这将在您创建项目时自动完成。

              • 如果你使用 spring MVC,你需要自己构建配置。它更复杂,但至关重要。

              【讨论】:

              • 简洁优雅的说明
              【解决方案10】:

              SpringBoot 实际上是预先配置的,它减少了锅炉配置并提供了最简单或快速的方式来启动您的应用程序。

              SpringBoot 将头疼的配置从开发人员转移到自己而不是 Spring。

              SpringBoot 隐含地基于 Spring 框架概念,如 bean、控制器、服务、jpa 等。

              可以说 SpringBoot 是 Spring 的一个包装器。

              在 SpringBoot 中,默认的服务器端口是 8080,但如果你想更改,请转到你的 application.properties 并编写

              server.port = 8084

              【讨论】:

                【解决方案11】:

                Spring MVC 是 Spring Framework 的一个子项目,旨在设计和开发使用 MVC(模型-视图-控制器)模式的应用程序。 Spring MVC 旨在与 Spring Framework 以及大多数其他子项目完全、完整地集成。

                Spring Boot 可以通过 Spring Engineering 团队的 this article 很好地理解。据说它是固执己见的,即它大力提倡某种快速开发的风格,但它的设计足够好,可以容纳规则的例外情况,如果你愿意的话。简而言之,它是一种约定优于配置的方法,它愿意理解您在必要时打破约定的需要。

                【讨论】:

                  猜你喜欢
                  • 2018-03-24
                  • 1970-01-01
                  • 2020-07-02
                  • 2017-02-19
                  • 1970-01-01
                  • 2013-04-29
                  • 2015-07-16
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多