Spring 和 Spring Boot 的区别

34

有很多人建议我使用Spring Boot来开发REST web服务,而不是使用Spring。 我想知道这两者之间的确切区别是什么?

7个回答

25

简而言之

  1. Spring Boot减少了编写大量配置和样板代码的需求。
  2. 它对Spring平台和第三方库有一种偏见的看法,因此您可以用最少的努力开始工作。
  3. 使用内置的Tomcat/Jetty/Undertow轻松创建独立应用程序。
  4. 提供度量、健康检查和外部化配置。

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


1
想要了解“_opinionated_”的定义...它是否基于使用情况而言的...所以,如果我用它来开发RESTful webservice,那么这是否是一种偏见,与获取样板和第三方库来完成RESTful webservice有关?知道这些信息会非常好。 - Beezer
我很想完全理解“有主见的观点”这个概念。我可以看到Spring Boot网站上是这样表述的:https://projects.spring.io/spring-boot/,但仍然需要解释一下这究竟意味着什么。 - panza
4
Opinionated的定义为:表现出自负、武断的坚定态度。简单来说,Spring Boot为你配置了许多与RESTful服务有关的属性,尽管它们可以被不同地配置。所以他们对于事情应该如何完成有一个观点,并且帮你节省了很多额外的努力。实际上,最终你可能会用相同的方式来做事情。但是,如果你需要改变非常具体或低级别的属性,你仍然有机会在Spring Boot中进行修改。来源:我的想象。 - Snackoverflow

10

很不幸,基于我个人对Spring Boot的沮丧,我仍然没有看到任何真正量化的列表,其中差异被明确地概述出来。 只有像“...有见解的视角...”这样的资格要求被随意传播。

显而易见的是,Spring Boot将一组Spring注释包装成了自己的注释集合。 进一步混淆,并使得任何刚开始使用Spring Boot的人都需要记住特定Spring Boot注释代表的内容。

因此我的回答对原问题没有可量化的好处,这与Spring Boot作者的类比相似。 在我看来,Spring的背后的人们故意让人感到困惑,这体现了他们JavaDoc和API的晦涩难懂(如果你认为我在批评,可以看看SpringBatch API),这让人怀疑他们的开源精神的价值。

我继续寻找解决Spring Boot的方法。

更新. 2022年8月22日

阅读这篇文章 (https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.auto-configuration) ,你会发现“有见解”的意思。 Spring Boot有超过140个Config类可用于此有见解的视图,具体取决于您类路径上的内容。 是的,就在你的类路径上。 最后,令人惊异的是,注释@SpringBootApplication本身就是一个配置注释,因为它包含了这个。


1
谢谢您,这真的澄清了我一直在试图自己弄清楚的问题。所以,请纠正我如果我错了,在本质上,SpringBoot将一组Spring注释捆绑到“自己”的注释中。例如,SpringBootApplication方便地添加了Configuration、EnableAutoConfiguratio和ComponentScan。如果是这样的话,对我来说,您所说的必须记住SpringBoot注释的世界,因为它与Spring注释不同,确实需要额外的工作。 - panza
1
迟到总比不来得好...对于回复晚了我很抱歉。简短的回答是:是的。谁会记得哪个Springboot注释包装了什么?除非你每天都在编码。即使如此,也要看看我最近失败的一次面试,他们想要混合使用SpringBoot和为其项目创建的定制事务管理的答案...可能有数百种非开箱即用的用法组合存在...然后,然后尝试浏览它们的发布文档(如果有的话)...将SpringBoot放在您的交付管道路径上...天哪。 - Beezer

9
基本上,Spring Boot 是 Spring 应用程序的一种观点实例。
Spring Boot 是一个快速应用程序开发平台。它使用了 Spring 的各种组件,并具有其他附加功能,如能够将应用程序打包为可运行的 jar 文件,其中包括嵌入式 tomcat(或 jetty)服务器。此外,Spring Boot 为您提供了许多自动配置(观点部分),它将根据可用或缺失的类/bean 挑选和选择要创建的内容。
如果您要使用 Spring,我也同意他们的观点,没有理由不使用 Spring Boot。

谢谢您的帮助 :) - Cheps

1

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


1
  • Spring可以消除样板式代码。
  • Spring Boot可以消除样板式配置。
    了解更多

0

如果您正在开发常见的Spring应用程序或开始学习Spring,我认为推荐使用Spring Boot。它极大地简化了工作,已经准备好投入生产,并且正在迅速被广泛采用。

Spring Boot 被认为是有偏见的,即它强烈倡导一种快速开发的风格,但它设计得足够好,可以容纳规则的例外情况。简而言之,它是一种约定优于配置的方法论,愿意理解您在必要时打破惯例的需求。


1
我认为Spring Boot实际上不是学习Spring的最佳方式,原因与您提到的相同。在我看来,它通过执行太多的魔法来隐藏了很多内部细节。这就像学习如何驾驶自动变速器汽车,然后再学习如何驾驶手动变速器汽车一样。我认识的所有人都是从自动变速器汽车开始学习的,后来从未转向真正的汽车... - Mischa Höchsmann

0
对于Spring框架,你需要使用XML配置Java配置来配置你的项目。 但是对于Spring Boot,这些都是根据Spring团队的观点为快速开发预配置的。这就是为什么Spring Boot被称为Spring Framework的“有主见的看法”。它遵循“约定优于配置”的设计范例。
注意:这些配置包括MVC的视图解析器、事务管理器、定位容器管理的bean(Spring bean)的方式等许多内容。当然,你可以根据需要覆盖这些预配置。
Spring Boot支持嵌入式servlet容器,如Tomcat、Jetty或Undertow,以创建独立应用程序,而Spring Framework则不支持。

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