三者区别

spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然就包含spring mvc。

spring mvc 是只是spring 处理web层请求的一个模块。

因此他们的关系大概就是这样:

spring mvc < spring

spring boot 我理解就是把 spring spring mvc spring data jpa 等等的一些常用的常用的基础框架组合起来,提供默认的配置,然后提供可插拔的设计,就是各种 starter ,来方便开发者使用这一系列的技术,套用官方的一句话, spring 家族发展到今天,已经很庞大了,作为一个开发者,如果想要使用 spring 家族一系列的技术,需要一个一个的搞配置,然后还有个版本兼容性问题,其实挺麻烦的,偶尔也会有小坑出现,其实蛮影响开发进度, spring boot 就是来解决这个问题,提供了一个解决方案吧,可以先不关心如何配置,可以快速的启动开发,进行业务逻辑编写,各种需要的技术,加入 starter 就配置好了,直接使用,可以说追求开箱即用的效果吧.

spring 框架有超多的延伸产品例如 boot security jpa etc... 但它的基础就是 spring 的 ioc 和 aop ioc 提供了依赖注入的容器 aop 解决了面向横切面的编程 然后在此两者的基础上实现了其他延伸产品的高级功能 Spring MVC 呢是基于 Servlet 的一个 MVC 框架 主要解决 WEB 开发的问题 因为 Spring 的配置太复杂了 各种 XML JavaConfig hin 麻烦 于是懒人改变世界推出了 Spring boot 约定优于配置 简化了 spring 的配置流程.

Spring 最初利用“工厂模式”( DI )和“代理模式”( AOP )解耦应用组件。大家觉得挺好用,于是按照这种模式搞了一个 MVC 框架(一些用 Spring 解耦的组件),用开发 web 应用( SpringMVC )。然后有发现每次开发都要搞很多依赖,写很多样板代码很麻烦,于是搞了一些懒人整合包( starter ),这套就是 Spring Boot 。

SpringBoot的优缺点

优点

1.创建独立的Spring应用程序

2.直接嵌入Tomcat,Jetty或Undertow(无需部署WAR文件)

3.提供自以为是的“入门”依赖项以简化构建配置

4.尽可能自动配置Spring和第三方库

5.提供生产就绪功能,例如指标,运行状况检查和外部化配置

6.绝对没有代码生成,也不需要XML配置

这段描述告诉我们,首先Spring Boot是一个基于 Spring框架搭建起来的应用,其次它会嵌入Tomcat、 Jetty或者Undertow等服务器,并且不需要传统的WAR 文件进行部署,也就是说搭建Spring Boot项目并不需要 单独下载Tomcat等传统的服务器;同时提供通过 Maven(或者Grandle)依赖的starter,这些starter可以直 接获取开发所需的相关包,通过这些starter项目就能以 Java Application的形式运行Spring Boot的项目,而无须 其他服务器配置;对于配置,Spring Boot提供Spring框 架的最大自动化配置,大量使用自动配置,使得开发者 对Spring的配置尽量减少;此外还提供了一些监测、自 动检测的功能和外部配置,与此同时没有附加代码和XML的配置要求。约定优于配置,这是Spring Boot的主导思想。对于 Spring Boot而言,大部分情况下存在默认配置,你甚至 可以在没有任何定义的情况下使用Spring框架,如果需 要自定义也只需要在配置文件配置一些属性便可以,十 分便捷。而对于部署这些项目必需的功能,Spring Boot 提供starter的依赖,例如,spring-boot-starter-web捆绑了 Spring MVC所依赖的包,spring-boot-starter-tomcat绑定 了内嵌的Tomcat,这样使得开发者能够尽可能快地搭 建开发环境,快速进行开发和部署,这就是Spring Boot 的特色。

缺点

  1. 版本迭代速度很快,一些模块改动很大
  2. 由于不用自己做配置,报错时很难定位

Spring Boot不是代替Spring,而是使Spring项目可 以更加快速地开发、部署和测试。它采用了“约定优于 配置”的理念,在其内部提供了大量的starter,而这些 starter又提供了许多自动配置类,让开发者可以奉行“拿 来主义”,开箱即用。虽然这样能够快速地开发、部署 和测试,但是也会带来很大的问题,那就是,如果不懂 Spring的原理,一旦出现开发的问题,开发者就很容易 陷入困境,难以找到问题的根源,造成开发者的困扰。