【问题标题】:Difference between Spring and Spring BootSpring 和 Spring Boot 的区别
【发布时间】:2015-07-16 19:59:28
【问题描述】:

有很多人建议我使用 Spring Boot 而不是 Spring 来开发 REST Web 服务。 我想知道这两者到底有什么区别?

【问题讨论】:

    标签: spring spring-boot rest


    【解决方案1】:
    • Spring 消除样板代码。
    • Spring-boot 消除了样板配置。
      more

    【讨论】:

      【解决方案2】:
      • 对于Spring Framework,您需要使用XML configurationJava configuration 配置您的项目。

        但对于 Spring Boot,这些都是根据 Spring 团队的观点预先配置的,以便快速开发。这就是为什么说Spring BootSpring Framework“观点”。它遵循 Convention over Configuration 设计范式。

        注意: 这些配置包括 MVC 的视图解析器、事务管理器、定位容器托管 bean 的方式(Spring bean)等等。当然,您可以根据需要覆盖任何这些预配置。

      • Spring Boot 支持嵌入式 servlet 容器,例如 TomcatJettyUndertow,以创建独立的应用程序,而 Spring Framework 没有。

      【讨论】:

        【解决方案3】:

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

        Spring Boot 被认为是固执己见的,即它大力提倡某种快速开发的风格,但它的设计足以容纳规则的例外情况,如果你愿意的话。简而言之,它是一种约定优于配置的方法,它愿意理解您在必要时打破约定的需要

        【讨论】:

        • 我认为 Spring Boot 实际上并不是开始学习 Spring 的最佳方式,原因与您提到的相同。在我看来,它通过做太多的魔法隐藏了很多内部结构。这就像学习驾驶自动变速箱的汽车,然后学习如何驾驶手动变速箱。我认识的所有人都是从自动变速箱开始的,后来再也没有换过真正的汽车……
        【解决方案4】:

        Spring Boot 是对 Spring Framework 项目的固执己见。让我们通过一个取自 Spring Boot 文档的程序来分析它。

        @RestController
        @EnableAutoConfiguration
        public class Example {
        
            @RequestMapping("/")
            String home() {
                return "Hello World!";
            }
        
            public static void main(String[] args) throws Exception {
                SpringApplication.run(Example.class, args);
            }
          }
        

        这是一个非常基本的 REST API,您需要在 POM.xml 中添加 Spring-boot-starter-web。由于您添加了 starter-web 依赖项,因此注释 @EnableAutoConfiguration 猜测您想开发一个 Web 应用程序并相应地设置 Spring。

        Spring Boot 自动配置尝试根据您添加的 jar 依赖项自动配置您的 Spring 应用程序。例如,如果 HSQLDB 在您的 classpath 上,并且您没有手动配置任何数据库连接 bean,那么 Spring Boot 会自动配置一个内存数据库。

        它像 maven 一样固执己见。 Maven 为您创建一个项目结构,它认为这是项目的一般模式,例如为您添加 src/main/java 文件夹或资源文件夹。

        Spring Boot 有助于加快开发速度。它有许多入门项目,可以帮助您更快地进行。它还包括许多非功能性功能,例如:嵌入式服务器、安全性、指标、健康检查等。简而言之,它使基于 Spring 的应用程序开发变得更容易,并且具有最少的侵入代码(更少的配置文件,更少的注释)。

        参考:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-documentation-about

        【讨论】:

          【解决方案5】:

          不幸的是,我的意思是出于对 Spring boot 的个人挫败感,我还没有看到任何真正的量化列表,其中明确列出了差异。 只有诸如“......自以为是......”这样的垃圾句。

          清楚的是,SpringBoot 已将 Spring 注释组隐式地包装到它自己的注释集中。 进一步混淆,并使得任何人开始使用 SpringBoot 都必须记住特定 SpringBoot 注释所代表的内容。

          因此,我的回答对原始问题没有可量化的好处,这类似于 SpringBoot 作者的回答。 Spring IMO 背后的人故意混淆视听,这反映了他们的 JavaDoc 和 API 的迟钝(请参阅 SpringBatch API 的例子,如果你认为我在燃烧),这让人怀疑他们的开源精神的价值。

          我对 SpringBoot 的探索仍在继续。

          【讨论】:

          • 感谢您,它确实阐明了我一直试图弄清楚自己的问题。所以,如果我错了,请纠正,本质上SpringBoot将一组Spring注释捆绑成“它自己的”。例如 SpringBootApplication 方便的添加了 Configuration、EnableAutoConfiguratio 和 ComponentScan。如果这是正确的,在我看来,你所说的必须记住 SpringBoot 注释的世界,因为它与 Spring 不同,这确实是一些额外的工作。
          • 迟到总比没有好...抱歉回复晚了。简短的回答:是的。谁会记住哪个 Springboot 注释包装了什么?除非您每天都在其中进行编码。即便如此,请参加我最近失败的一次采访,他们希望得到答案。他们为他们的项目创建的 SpringBoot 和定制事务管理......必须有数百种非开箱即用的用法组合......然后,然后尝试浏览他们的发布文档(如果有) ...已将 SpringBoot 放在您的交付管道路径上...OMG。
          【解决方案6】:

          总之

          1. Spring Boot 减少了编写大量配置和样板代码的需要。
          2. 它对 Spring Platform 和第三方库有独到见解,因此您可以轻松上手。
          3. 使用嵌入式 Tomcat/Jetty/Undertow 轻松创建独立应用程序。
          4. 提供指标、健康检查和外部化配置。

          您可以在这里阅读更多内容http://projects.spring.io/spring-boot/

          【讨论】:

          • 想要一个 opinionated 的定义...它是否基于用例而固执己见...所以如果我用它来开发 RESTful Web 服务,那是固执己见的倾向吗,与获得样板和第 3 部分库以完成 RESTful Web 服务有关吗?很高兴知道...
          • 我希望自己能够完全理解“观点”的概念。我可以很清楚地看到它在 Spring Boot 网站上是这样用的:projects.spring.io/spring-boot,但最好能解释一下它的真正含义。
          • 固执己见的定义——以自负的自信和教条主义为特征。简而言之,Spring Boot 为您配置了许多关于 RESTful 服务的属性,尽管它们可以进行不同的配置。因此,他们对应该如何完成事情有意见,从而使您免于付出很多额外的努力。老实说,最后,你可能会以同样的方式做事。但是,如果您需要更改非常具体或低级别的属性,您仍然有机会在 Spring Boot 中执行此操作。来源:我的想象。
          【解决方案7】:

          基本上,Spring Boot 是 Spring 应用程序的一个自以为是的实例。

          Spring Boot 是一个快速的应用程序开发平台。它使用 Spring 的各种组件,但具有额外的细节,例如将应用程序打包为可运行 jar 的能力,其中包括嵌入式 tomcat(或码头)服务器。此外,Spring Boot 包含许多自动配置(固执的部分),它会根据可用或缺少的类/bean 来挑选和选择要创建的内容。

          我会回应他们的观点,如果你打算使用 Spring,我想不出没有 Spring Boot 的任何理由。

          【讨论】:

          • 感谢您的帮助:)
          猜你喜欢
          • 2015-12-31
          • 2017-02-19
          • 2020-07-02
          • 2018-03-24
          • 2017-11-29
          • 1970-01-01
          • 2017-12-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多