Spring全家桶了为了解决不同场景的问题,逐渐演化出多套生态环框,如:Spring、SpringMVC、SpringBoot、SpringCloud。
Spring MVC和Spring Boot都属于Spring,Spring MVC是基于Spring的一个 MVC 框架,而Spring Boot是基于Spring的一套快速开发整合包。而Spring Cloud就是基于Spring Boot风格的封装的一系列框架的有序集合。
简单通俗地来理解就是:Spring最初利用“工厂模式”(DI)和“代理模式”(AOP)解耦应用组件,大家觉得很好用,于是按照这种模式搞了一个MVC框架(一些用Spring解耦的组件)用于开发 web应用,这也就是我们熟悉的SpringMVC.然后又发现每次开发都写很多同样形式的代码现得很累赘,为了简化工作流程,就开发出了一些“懒人整合包”(starter)的模式,这套就是Spring Boot,后面项目越做越大交互越来约繁杂,大家已经在业务和运维的路上越走越疲惫了,于是业界就出现了微服务的概念,将不同的业务进行拆分,Spring基于此搞出了一套SpringCloud作为微服务的解决方案。
Spring MVC
Spring MVC是一个前端的MVC框架,它提供了一种轻度耦合的方式来开发Web应用,通过Dispatcher Servlet、ModelAndView以及View Resolver的联合使得Web应用开发变得更加容易。SpringMVC采用“请求-响应”的模型将Web层进行解耦,项目结构分层明显职责划分清晰,控制器负责接受请求、委派处理给其他Bean然后返回请求响应,通过Spring被注入的其他Bean则支持了具体的业务执行,然后以ModelAndView的方式返回响应内容。SpringMVC主要解决的问题领域是网站应用程序或者服务开发——URL路由、Session、模板引擎和静态Web资源等等。
优点:SpringMVC简单但是灵活性强,框架易于扩展。
缺点:SpringMVC与Servlet耦合了,不能脱离容器独立运行;框架过于细分使得开发效率低。
Spring Boot
Spring Boot引入自动配置的概念,让项目设置变得很容易。Spring Boot本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。也就是说,它并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具。同时它集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot应用中这些第三方库几乎可以零配置的开箱即用(out-of-the-box),大部分的Spring Boot应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。Spring Boot只是承载者,辅助开发者简化项目搭建过程的。如果承载的是WEB项目,使用Spring MVC作为MVC框架,那么工作流程和Spring MVC的是完全一样的,因为这部分工作是Spring MVC做的而不是Spring Boot。
通过官网的摘要我们也能够看出,SpringBoot提供服务单独运行的能力,而且内嵌容器如Tomcat、Jetty或者Undertow等,SpringBoot的项目在配置上做到了极简,通过spring自动配置让你解脱对项目配置依赖的过分关注,同时,SpringBoot的注解方式让我们从纷繁复杂的XML配置中彻底的解放了出来。
springboot 要解决的问题:
1、如何精简配置;如何让编码、部署、监控变简单;
2、如何方便的让spring生态圈和其他工具链整合。
优点:搭建项目简单,配合Maven看看文档就能够搭建出一个新的项目;配置简单高效,开发敏捷,部署便利。
缺点:因为简单所以屏蔽了背后复杂的实现,这让不熟悉Spring的开发者在后续问题的解决上变得困难。
Spring Cloud
Spring Cloud为分布式系统快速构建行业统一特征模式的应用提供了一个行之有效的解决工具箱,诸如配置管理、服务发现、熔断器、只能路由、微服务代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话以及集群状态等,通过各分布式微服务组件的实现以及协调使用,开发者能够快速构建出运行良好的服务。
显然,Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
微服务是可以独立部署、水平扩展、独立访问(或者有独立的数据库)的服务单元,Spring Cloud就是这些微服务的大管家,采用了微服务这种架构之后,项目的数量会非常多,Spring Cloud作为大管家需要管理好这些微服务,通过Spring Cloud官网我们可以看到有很多组件为微服务助力,使得这种微服务架构在服务众多之时也便于通讯、管理和维护。
优点:得益于SpringBoot的开发便利性,让微服务的实现变得简单可行;作为微服务解决方案,考虑全面并且方便使用基本上都是开箱即用;配置和使用都简单,只需要简单的配置即可实现复杂的功能。
缺点:因为微服务体系中涉及到众多的框架,加重了学习成本,同时为后期的运维带来了困难。
学习总结
Spring是一个“引擎”;
Spring MVC是基于Spring的一个MVC框架;
Spring Boot是基于Spring4的条件注册的一套快速开发整合包;
Spring Cloud是基于Spring Boot搭建的分布式微服务系统解决方案。