spring和springmvc的区别是什么SpringMVC和Spring有什么区别spring与springmvc的区别




spring和springmvc的区别是什么SpringMVC和Spring有什么区别spring与springmvc的区别

2022-07-21 2:27:48 网络知识 官方管理员

spring和springmvc的区别是什么(SpringMVC和Spring有什么区别)(1)

我们首先还是先来介绍一下Spring,SpringBoot,SpringMVC。了解一下他们都是做什么的,解决了什么问题,我们才能清楚的理解他们之间的区别和联系。

先上结论!!!

解释过程在下面。

结论

Spring是一个框架,SpringMVC是Spring的一个模块,一个web框架,SpringBoot则是一个Spring的快速开发整合包。

概念

  1. 应用程序:是能完成我们所需要的功能的成品,比如购物网站、OA系统。
  2. 框架:是能完成一定功能的半成品。比如我们可以使用框架进行购物网站开发,框架做一部分功能,我们做一部分功能,这样应用程序就创建出来了。而且框架规定了你在开发应用程序时的整体结构,提供了一些基础功能,还规定了类和对象的如何创建、如何协作等。从而简化我们开发,让我们专注于业务逻辑开发。
  3. 非侵入式设计:从框架角度可以这样理解,无需继承框架提供的类,这种设计就可以看作是非侵入式设计,如果继承了这些框架类,就是侵入设计,如果以后想更换框架,之前写过的代码几乎无法重用,如果是非侵入式设计,则之前写过的代码仍然可以继续使用。
  4. 轻量级和重量级:轻量级是相对于重量级而言的,轻量级一般就是非侵入性、所依赖的东西非常少、资源占用非常少、部署简单等等,其实就是比较容易使用,而重量级正好相反。
  5. POJO:POJO(PlainOldJavaObjects)简单的Java对象。POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其他框架侵入的Java对象。POJO有无参构造函数,每个字段都有getter和setter的Java类。
  6. 容器:在日常生活中容器就是一种盛放东西的器具,从程序设计角度看就是装对象的对象,因为存在放入、拿出等操作,所以容器还要管理对象的生命周期。
  7. 控制反转:IoC(InversionofControl),控制反转还有另外一个名字叫做依赖注入(DependencyInjection)。就是以前程序控制对象,现在由框架控制。
  8. 脚手架:建筑上的脚手架就是先搭个架子,然后工人们慢慢往里面砌砖头,直到建筑成型。编程中的脚手架可以理解为有个空架子把环境配置、各种依赖都搭建好,要创建新项目的时候拿来直接往里面添加新项目需要的东西。

Spring、SpringMVC和SpringBoot

Spring

什么是Spring

一句话,Spring是一个开发应用框架,什么样的框架呢,有这么几个标签:轻量级、非侵入式、一站式、模块化,其目的是用于简化企业级应用程序开发。

目的

  • 为了简化企业级应用程序开发

做了什么

Spring除了不能帮我们写业务逻辑,其余的几乎都能帮助我们简化开发。

管理对象,以及对象之间的依赖关系

传统程序开发,创建对象及组装对象间依赖关系由我们在程序内部进行控制,这样会加大各个对象间的耦合,如果我们要修改对象间的依赖关系就必须修改源代码,重新编译、部署。而如果我们采用Spring,则由Spring根据配置文件来进行创建及组装对象间依赖关系,只需要修改配置文件即可,无需重新编译,所以,Spring能帮我们根据配置文件创建及组装对象之间的依赖关系。

面向切面编程

当我们要进行一些日志记录、权限控制、性能统计等时,在传统应用程序当中我们可能在需要的对象或方法中进行,比如权限控制、性能统计,大部分代码都是重复的,这样代码中就存在大量重复代码,即时有人说我把通用部分提取出来,那必然存在调用,还是存在重复复,像性能统计我们可能只是在必要时才进行,在诊断完毕后要删除这些代码。等等。

如果采用Spring,这些日志记录、权限控制、性能统计能从业务逻辑中分离出来,通过Spring支持的面向切面编程,在需要这些功能的地方动态添加这些功能,无需渗透到各个需要的方法或对象中。

即使可以通过“代理设计模式”或“包装器设计模式”,但还是需要通过编程方式来创建代理对象,还是要耦合这些代理对象,而采用Spring面向切面编程能提供一种更好的方式来完成上述功能,一般通过配置方式,而且不需要在现有代码中添加任何额外代码,现有代码专注于业务逻辑。所以,Spring面向切面编程能帮助我们无耦合的实现日志记录、性能统计、安全控制。

数据库事务管理

在传统应用程序当中,我们如何来完成数据库事务管理呢?我们需要一系列“获取连接、执行SQL、提交或者回滚事务、关闭连接”操作,而且还要保证在最后一定要关闭连接,多么可怕的事情,而且也很无聊。如果采用Spring,我们只需要获取连接,执行SQL,其他的都交给Spring来管理就可以了。

第三方数据访问框架集成

Spring提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板,来方便数据库访问。

第三方Web框架集成

Spring提供了与第三方Web(如Struts、JSF)框架无缝集成,而且自己也提供了一套SpringMVC框架,来方便web层搭建

优点

  • 方便解耦,简化开发。使用Spring的IoC容器,将对象之间的依赖关系交给Spring,让我们更专注于应用逻辑。
  • 对主流的光甲提供了很好的集成支持,如Hibernate、Struts2、JPA等。
  • Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。
  • Spring的高度可开放性,并不强制依赖于Spring,开发者可以自由选择Spring部分或全部

SpringMVC

什么是MVC

MVC是一种架构模式,MVC是三个字母的首字母缩写,它们是Model(模式)、View(视图)和Controller(控制)。该模式可以把不论简单或复杂的程序,都从结构上划分为三层。

  • 最上面的一层,是直接面向最终用户的“视图层"(View)。它是提供给用户的操作界面,是程序的外壳。
  • 最底下的一层,是核心的”数据层“(MOdel),也就是程序需要操作的数据或者信息。
  • 中间的一层,就是”控制层“(Controller),它负责根据用户从”视图层“输入的指令,选取”数据层“中的数据,然后对其进行相应的操作,产生最终结果。

每一部分都相对独立,职责单一,在实现的过程中可以专注于自身的核心逻辑。MVC是对系统复杂性的一种合理的梳理与划分,它的思想实质就是”关注点分离“。

什么是SpringMVC

首先是一个MVC框架。

其次是一个Spring子框架。

Spring的WEBMVC框架是围绕DispatchServlet设计的,它把请求分配给处理程序,同时带有可配置的处理程序映射视图解析本地语言主题解析以及上载文件支持。应用控制器其实拆为处理器映射器(HandlerMapping)进行处理器处理和视图解析器(ViewResolver)进行视图管理,页面控制器是非常简单的Controller接口,只有一个方法ModelAndViewhandleRequest(request,response)。Spring提供了一个控制器层次结构,可以派生子类。如果应用程序需要处理用户输入表单,那么可以继承AbstractFormController,如果需要把多页输入处理到一个表单,那么可以集成AbstractWizardFormController。

基本流程

当web程序启动的时候,ContextLoaderServlet会把对应的配置文件信息读取出来,通过注入去初始化控制器DispatchServlet。

当接收到一个HTTP请求的时候,ContextLoaderServlet会让HandlerMapping去处理这个请求,HandlerMapping根据请求URL(不一定非要是URL,完全可以自定义,非常灵活)来选择一个Controller,然后DispatchServlet会在调用选定的Controller的HandlerRequest方法,并且在这个方法前后调用这个Controller的1interceptor(假如有配置的话),然后返回一个视图和模型的集合ModelAndView。框架通过ViewResolver来解析视图并且返回一个View对象,最后调用View的render方法返回到客户端

特性(优势)

  1. 让我们能非常简单的设计出干净的Web层和薄薄的Web层。
  2. 进行更简洁的Web层的开发。
  3. 天生与Spring框架集成(如IoC容器、AOP等)。
  4. 提供了强大的约定大于配置的契约式编程支持。
  5. 能简单的进行Web层的单元测试。
  6. 支持灵活的URL到页面控制器的映射。
  7. 非常容易与其他视图技术集成,如Velocity、FreeMarker等等,因为模型数据不放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用)。
  8. 非常灵活的数据验证,格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API。
  9. 提供一套强大的JSP标签库,简化JSP开发。
  10. 更加简单的异常处理。
  11. 对静态资源的支持。
  12. 支持Restful风格。

SpringBoot

什么是SpringBoot

Boot是启动的意思。

SpringBoot并不是一个全新的框架,它不是Spring解决方案的一个替代品,而是Spring的一个封装。

什么是starter

Starter可以总结为一种对依赖的合成。

在没有starter之前,加入我想要在Spring中使用jpa,那我可能需要做以下操作:

  1. 在Maven中引入使用的数据库的依赖(即JDBC的jar)
  2. 引入jpa的依赖
  3. 在xxx.xml中配置一些属性信息
  4. 反复的调试直到可以正常运行

需要注意的是,上述操作在我们每次新建一个需要用到jpa的项目的时候都需要重复的做一次

但是这样操作就会带来很多问题:

  1. 如果过程比较繁琐,这样一步步操作会增加出错的可能性
  2. 不停地copy&paste,不符合Don'trepertyourself精神
  3. 在第一次配置的时候(尤其如果开发者比较小白),需要花费掉大量的时间

starter主要目的就是为了解决上述问题。

starter的理念是starter会把所有用到的依赖都给包含进来,避免了开发者自己去引入依赖所带来的麻烦。

为什么用boot?

免费开源。中小型企业,没有成本研究自己的框架,boot功能全也能快速搭建项目,降低开发成本。

其他语言的简易化,给java造成的冲击,再不改善,就会被抛弃了,催生了这款脚手架的诞生。

优点

  1. 使业务开发变得简单。SpringBoot采用了javaconfig的方式,对Spring进行了配置,并且提供了大量的注解,极大的提供了工作的效率。
  2. 使配置变得简单。SpringBoot提供许多默认配置,当然也提供自定义配置。但是所有的SpringBoot的项目都只有一个配置文件:application.properties/application.yml。用了SpringBoot,再也不用担心配置出错找不到问题所在了。
  3. 使部署变得简单。SpringBoot内置了三种servlet容器:tomcat、jetty、undertow。所以你只需要一个java的运行环境就可以跑SpringBoot的项目了。SpringBoot的项目可以打成一个jar包,然后通过运行java-jarxxx.jar来运行。(Springboot项目的入口是一个main方法,运行该方法即可。)
  4. 使监控变得简单。SpringBoot提供了actuator包,可以使用它来对你的应用进行监控。
  5. 插拔式搭建项目。boot是个脚手架,如果需要web功能,maven引入对应的jar包;需要集成mybatis,引入包,简单几句注解则组装完成。


发表评论:

最近发表
网站分类
标签列表