当前位置:   article > 正文

 Java常用框架spring,springMVC,springBoot,springCloud的介绍和它们之间的区别与联系_java spring mvc spring cloud

java spring mvc spring cloud

内容提要

Spring 是框架。

SpringMVC 是 Web 层的开发框架,springMVC是框架,项目中实际运行的代码。

SpringBoot只是一个配置工具,整合工具,辅助工具。

Springboot、SpringCloud 是Spring 的衍生产品。Spring 框架就像一个家族,有众多衍生产品例如 boot、security、jpa等等。但他们的基础都是Spring 的ioc和 aop. ioc 提供了依赖注入的容器, aop解决了面向横切面的编程,然后在此两者的基础上实现了其他延伸产品的高级功能。

Spring MVC是基于Servlet实现的一个前端MVC框架,主要解决WEB项目开发的问题。因为在业务开发的过程中发现Spring的配置非常复杂,各种XML、Config等处理起来比较繁琐。于是为了简化开发者的使用,从而创造性地推出了Spring boot,约定优于配置,简化了spring的配置流程。在业务日益繁杂和庞大的进程中,很多企业已经疲于应付庞大的业务模块和错综复杂的数据交互,于是微服务的理念开始提了出来,Spring根据这个理念打造出来微服务全家桶Spring Cloud,这其中有非常多高效的组件活跃在微服务生态中,微服务是基于Spring Boot进行开发的.

简单通俗地来理解就是:Spring最初利用“工厂模式”(DI)和“代理模式”(AOP)解耦应用组件,大家觉得很好用,于是按照这种模式搞了一个MVC框架(一些用Spring解耦的组件)用于开发 web应用,这也就是我们熟悉的SpringMVC,然后又发现每次开发都写很多同样形式的代码现得很累赘,为了简化工作流程,就开发出了一些“懒人整合包”(starter)的模式,这套就是Spring Boot,后面项目越做越大交互越来约繁杂,大家已经在业务和运维的路上越走越疲惫了,于是业界就出现了微服务的概念,将不同的业务进行拆分,Spring基于此搞出了一套SpringCloud作为微服务的解决方案。

一、Spring

介绍:spring是一个一站式的轻量级的java开发框架,核心是控制反转(IOC)和面向切面(AOP),针对于开发的WEB层(springMvc)、业务层(Ioc)、持久层(jdbcTemplate)等都提供了多种配置解决方案。Spring 是一个开源框架,起初是为解决企业应用开发的复杂性而创建,但是现在已经不止于企业应用。Spring框架是一个大集合,也像一个大家族,可以到spring.io官网了解。但家庭成员的基础都是基于Spring的IoC和AOP特性, IoC提供了依赖注入(DI)的容器,可谓是核心,AOP则提供了面向切面的编程方案,在前两者的基础上,继续演化升级实现了其他延伸产品的高级功能。Spring的核心就是提供一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架。他相比老的JAVAEE有很多的优秀的特质,下面说说最重要的两个:

(1)控制反转(IoC)

所谓控制反转,就是一个对象的使用不再是手动创建,而是被动的被传递 进来。这么做的好处就在于--解耦,尤其是面对接口编程时。

# 老的写法publicboolean sendMsg(String msg){MsgServicemsgService = new MsgServiceImpl();returnmsgService.sendMsg(msg);}# 有IoC后的写法@AutowiredMsgServicemsgService;publicboolean sendMsg(String msg){returnmsgService.sendMsg(msg);}

看起来相差不大,但IoC更加的有利于代码的解耦。使用IoC后就由老的面向对象编程变成了面向接口编程,我在使用MsgService 的时候,他的实际实现是对我屏蔽的。这对解耦、拓展、维护是一个很好的基础。我要更改sendMsg的逻辑,只需再提供一个新的该接口的实现替换上就好,其他调用的地方都无需改动。JDBC驱动其实就是这个道理,提供接口规范,各个厂家提供实现就好。

(2)面向切面(AOP)

AOP使程序猿更加关注主体业务的开发,一些公共的可抽象的业务比如日志、事务等,在编码时都无须额外关注。这样能更好的实现单一原则、高内聚。

二、springMVC

介绍:springMVC是spring基础之上的一个MVC框架,主要处理web开发的路径映射和视图渲染,属于spring框架中WEB层开发的一部分;Spring MVC可以理解为Spring和MVC结合的一种开发架构,Spring的概念可以参阅上面所述。MVC是一种将数据业务、显示逻辑和控制逻辑进行分层的设计模式,业内常见的mvc开发框架有Struts1、Struts2等。SpringMVC是用于Web程序的通用框架。SpringMVC是在Spring的一部分,是一个WEB开发框架。MVC指的就是MVC设计模式,Model、View、Controller。具体是什么我也不赘述了。Spring MVC是一个前端的MVC框架,它提供了一种轻度耦合的方式来开发Web应用,通过Dispatcher Servlet、ModelAndView以及View Resolver的联合使得Web应用开发变得更加容易。SpringMVC采用“请求-响应”的模型将Web层进行解耦,项目结构分层明显职责划分清晰,控制器负责接受请求、委派处理给其他Bean然后返回请求响应,通过Spring被注入的其他Bean则支持了具体的业务执行,然后以ModelAndView的方式返回响应内容。SpringMVC主要解决的问题领域是网站应用程序或者服务开发——URL路由、Session、模板引擎和静态Web资源等等。

优点:SpringMVC简单但是灵活性强,框架易于扩展。

缺点:SpringMVC与Servlet耦合了,不能脱离容器独立运行;框架过于细分使得开发效率低。

SpringMVC的工作流程简单来说是这样的:

(1)DispatcherServlet

是SpringMVC的核心Servlet,字面意思理解,他起着调度的作用。

(2)HandlerMapping

DispatcherServlet通过HandlerMapping得到该URI对应的Controller信息。

(3)HandlerAdapter

拿到Controller信息后,通过HandlerAdapter调用Controller。

(4)Controller

该URI的业务逻辑,完成后返回给HandlerAdapter->HandlerAdapter。

(5)ViewResolver

得到Controller的返回数据后,DispatcherServlet通过ViewResolver得到相应的View。

(6)View

得到View后,用Model的数据进行渲染,包装到Response中返回给前端。

结构图是这样的:

三、springBoot

1. springBoot使用了默认大于配置的理念,集成了快速开发的spring多个插件,同时自动过滤不需要配置的多余的插件,简化了项目的开发配置流程,一定程度上取消xml配置,是一套快速配置开发的脚手架,能快速开发单个微服务;SpringBoot是用来简化Spring框架应用初始化搭建以及开发的全新框架,比如通过自动化配置省去了大量繁琐的配置文件,因此SpringBoot可以理解成,一个通过简化配置文件来服务于框架的框架。SpringBoot工程使用包括如下特点和优点:(1)创建独立的Spring应用程序,简化Maven配置,可以快速构建Spring项目。(2)一个简单的SpringBoot工程是不需要在pom.xml中手动添加配置的,如果与其它技术合用,比如postMan(文档在线自动生成、开发功能测试的一套工具)、Swagger(文档在线自动生成、开发功能测试的一套工具),则需要在pom.xml中添加依赖,由程序自动添加依赖jar包等配置文件。(3)在SpringBoot创建时会自动创建Bootdemo1Application启动类,代表着本工程项目和服务器的启动加载,在springBoot中嵌入有Tomcat服务器的,无需手动部署war文件。

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的开发者在后续问题的解决上变得困难。

四、springCloud

介绍: springCloud大部分的功能插件都是基于springBoot去实现的,springCloud关注于全局的微服务整合和管理,将多个springBoot单体微服务进行整合以及管理;springCloud依赖于springBoot开发,而springBoot可以独立开发;spring Cloud基于SpringBoot,为微服务体系开发中的架构问题,提供了一整套的解决方案——服务注册与发现,服务消费,服务保护与熔断,网关,分布式调用追踪,分布式配置管理等。多个小服务整合成大服务,要有一个消息总线来用于互相通知和调用,要有一个服务发现程序来管理某个小服务上线可用,同时在服务离线时也要能处理,各个小服务要尽量各自独立,还要考虑服务的依赖性,集群的负载均衡,配置文件的分离。这样完成的一个服务是更具有可插拔性,更容易维护的。而且遵循了上面的cloud方案的话,在服务的健壮性上面也很强。Spring boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring boot,属于依赖的关系。SpringCloud是分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术得集合体,俗称微服务栈解决方案。

Spring Cloud为分布式系统快速构建行业统一特征模式的应用提供了一个行之有效的解决工具箱,诸如配置管理、服务发现、熔断器、只能路由、微服务代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话以及集群状态等,通过各分布式微服务组件的实现以及协调使用,开发者能够快速构建出运行良好的服务。显然,Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。微服务是可以独立部署、水平扩展、独立访问(或者有独立的数据库)的服务单元,Spring Cloud就是这些微服务的大管家,采用了微服务这种架构之后,项目的数量会非常多,Spring Cloud作为大管家需要管理好这些微服务,通过Spring Cloud官网我们可以看到有很多组件为微服务助力,使得这种微服务架构在服务众多之时也便于通讯、管理和维护。

优点:得益于SpringBoot的开发便利性,让微服务的实现变得简单可行;作为微服务解决方案,考虑全面并且方便使用基本上都是开箱即用;配置和使用都简单,只需要简单的配置即可实现复杂的功能。

缺点:因为微服务体系中涉及到众多的框架,加重了学习成本,同时为后期的运维带来了困难。

五、它们之间的区别与联系

spring和springMVC:

1. spring是一个一站式的轻量级的java开发框架,核心是控制反转(IOC)和面向切面(AOP),针对于开发的WEB层(springMvc)、业务层(Ioc)、持久层(jdbcTemplate)等都提供了多种配置解决方案。

2. springMvc是spring基础之上的一个MVC框架,主要处理web开发的路径映射和视图渲染,属于spring框架中WEB层开发的一部分。

springMvc和springBoot:

1. springMVC属于一个企业WEB开发的MVC框架,涵盖面包括前端视图开发、文件配置、后台接口逻辑开发等,XML、config等配置相对比较繁琐复杂。

2. springBoot框架相对于springMvc框架来说,更专注于开发微服务后台接口,不开发前端视图,同时遵循默认优于配置,简化了插件配置流程,不需要配置xml,相对springmvc,大大简化了配置流程。

springBoot和springCloud:

SpringCloud偏于整体,SpringBoot偏部分。如果将SpringBoot比作成医院里一个一个的科室,SpringCloud则是将SpringBoot组合起来对外的综合医院。SpringBoot可以单独使用,不依赖于SpringCloud,而SpringCloud必然依赖于Spring Boot,属于依赖关系。SpringBoot专注于快速的开发单个个体微服务。SpringCloud是关注于全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单个微服务整合并管理起来,为各个微服务之间提供配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务。他是的基础是SpringBoot,提供了微服务架构下的各个组件的集成序列(负载均衡、容灾、服务治理等等)。

总结:

普通版:

1. Spring 框架就像一个家族,有众多衍生产品例如 boot、security、jpa等等。但他们的基础都是Spring的ioc、aop等. ioc 提供了依赖注入的容器, aop解决了面向横切面编程,然后在此两者的基础上实现了其他延伸产品的高级功能;

2. springMVC是基于Servlet 的一个MVC框架主要解决WEB开发的问题,因为Spring的配置非常复杂,各种XML、JavaConfig、servlet处理起来比较繁琐;

3. 为了简化开发者的使用,从而创造性地推出了springBoot框架,默认优于配置,简化了springMvc的配置流程;但区别于springMvc的是,springBoot专注于微服务方面的接口开发,和前端解耦,虽然springBoot也可以做成springMvc前后台一起开发,但是这就有点不符合springBoot框架的初衷了;

4. 对于springCloud框架来说,它和springBoot一样,注重的是微服务的开发,但是springCloud更关注的是全局微服务的整合和管理,相当于管理多个springBoot框架的单体微服务。

精简版:

1.Spring是一个“引擎”;

2.SpringMVC是基于Spring的一个MVC框架;

3.SpringBoot是基于Spring4的条件注册的一套快速开发整合包;

4.SpringCloud是基于SpringBoot搭建的分布式微服务系统解决方案。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/435395
推荐阅读
相关标签
  

闽ICP备14008679号