最近面试被问到了Spring、SpringMvc、SpringBoot和SpringCloud的关系和区别,以及各解决了什么问题,简单整理了下四者之间的区别和联系以及解决的问题:
Spring和SpringMvc:
- Spring是一个一站式的轻量级的java开发框架,核心是控制反转(IOC)和面向切面(AOP),针对于开发的WEB层(SpringMvc)、业务层(Ioc)、持久层(jdbcTemplate)等都提供了多种配置解决方案;
- SpringMvc是Spring基础之上的一个MVC框架,主要处理web开发的路径映射和视图渲染,属于Spring框架中WEB层开发的一部分;
SpringMvc和SpringBoot:
- SpringMvc属于一个企业WEB开发的MVC框架,涵盖面包括前端视图开发、文件配置、后台接口逻辑开发等,XML、config等配置相对比较繁琐复杂;
- SpringBoot框架相对于SpringMvc框架来说,更专注于开发微服务后台接口,不开发前端视图,同时遵循默认优于配置,简化了插件配置流程,不需要配置xml,相对Springmvc,大大简化了配置流程;
SpringBoot和SpringCloud:
- Spring boot使用了默认大于配置的理念,集成了快速开发的Spring多个插件,同时自动过滤不需要配置的多余的插件,简化了项目的开发配置流程,一定程度上取消xml配置,是一套快速配置开发的脚手架,能快速开发单个微服务;
- Spring cloud大部分的功能插件都是基于SpringBoot去实现的,SpringCloud关注于全局的微服务整合和管理,将多个SpringBoot单体微服务进行整合以及管理; SpringCloud依赖于SpringBoot开发,而SpringBoot可以独立开发;
总结:
- Spring 框架就像一个家族,有众多衍生产品例如 boot、security、jpa等等。但他们的基础都是Spring的ioc、aop等。 ioc 提供了依赖注入的容器, aop解决了面向横切面编程,然后在此两者的基础上实现了其他延伸产品的高级功能;
- SpringMvc是基于Servlet 的一个MVC框架主要解决WEB开发的问题,因为Spring的配置非常复杂,各种XML、JavaConfig、servlet处理起来比较繁琐;
- 为了简化开发者的使用,从而创造性地推出了SpringBoot框架,默认优于配置,简化了SpringMvc的配置流程;
但区别于SpringMvc的是,SpringBoot专注于微服务方面的接口开发,和前端解耦,虽然SpringBoot也可以做成SpringMvc前后台一起开发,但是这就有点不符合SpringBoot框架的初衷了; - 对于SpringCloud框架来说,它和SpringBoot一样,注重的是微服务的开发,但是SpringCloud更关注的是全局微服务的整合和管理,相当于管理多个SpringBoot框架的单体微服务;
参考:https://blog.csdn.net/alan_liuyue/article/details/80656687