Spring家族有哪些成员
基本上你听过的带Spring字眼的都是Spring全家桶的成员,像Spring,SpringBoot,SpringCloud。至于SpringMVC则是作用于Web层,可以把它当做Spring的一个后续产品,这里我们留待最后再做讨论。
Spring和SpringBoot的关系
简单的说,SpringBoot就是为了我们更方便的使用Spring而诞生的,他将Spring平台和第三方库进行了整合,我们可以不用操心他怎么整合,这些工作框架都做好了。
关于SpringBoot,官网上对于它的特性,是这样介绍的:
• Create stand-alone Spring applications
• Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
• Provide opinionated 'starter' dependencies to simplify your build configuration
• Automatically configure Spring and 3rd party libraries whenever possible
• Provide production-ready features such as metrics, health checks, and externalized configuration
• Absolutely no code generation and no requirement for XML configuration
嗯,简单翻译一下主要有以下几个点
1)首先,SpringBoot可以创建独立的Spring 应用,他的出现就是让我们使用Spring的时候更方便而出现的。
2)内嵌了Web服务器(Tomcat或者Jetty),这样你就不用部署war包了。
3)SpringBoot内部通过starter机制来简化你的配置,不需要你自己写代码也不需要通过xml去配置,自动装配了Spring和第三方库。
4 )提供了度量,健康检查,外部配置等第三方特性。
哦哦,你看到了,他把原来你使用Spring时需要自己动手配置的东西,现在你只需要在pom文件里面加上几个简单的启动器依赖的话,系统在“后台”帮你把这些事情做了。
基本上你可以认为Spring和SpringBoot的区别就是汽车手动挡和自动挡的区别,里面的Starter就相当于是个自动变速箱,这下你可以自由畅快的开了,不用手脚并用去换挡了。
SpringBoot与SpringCloud的区别
关于SpringCloud,一个典型定义是这样的:SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务合并管理起来,为各个微服务之间提供配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务。
嗯,SpringCloud就是为微服务而生的一个框架,SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖的关系。
SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。额,简单理解SpringBoot还是单体系统的架构,而SpringCloud则是一个分布式架构了。一个典型的SpringCloud框架的组成部分是这样的:

Eureka用来做服务注册发现,Ribbon用来做负载均衡,Hystrix断路器,Zuul服务网关,远程调用组件Feign,这些都是大名鼎鼎的Netflix(网飞)公司开发的,Spring Cloud Config用来做分布式配置。当然除了这些必要的部分,可能还会加入监控组件。
另外除了netflix提供的第一代微服务框架以外,Spring Cloud Alibaba还提供了另外一套选择,他注册发现使用了nacos,限流熔断使用了Sentinel,不过他们实际只是解决同一问题的不同方案,总体的框架是一样的。
Spring和SpringMVC的关系
最后我们看一下SpringMVC,个人认为广义上的Spring其实已经包含SpringMVC 了,它不过是Spring为了适应在Web层的工作而相对独立的抽取的一个模块。这里我们对应一下常规的MVC架构看一下他们之间的关系:

你看到了Spring才是这一模型框架的基石,SpringMVC作用于Controller层,而直接和数据库相关的Dao层的操作则交给了MyBatis。