Spring,SpringBoot,Spring MVC的区别是什么

news2024/12/26 20:56:45

1.Spring是什么

我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃⽽庞⼤的社区,这就是它之所以能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景,它可以让 Java 企业级的应⽤程序开发起来更简单。

⽤⼀句话概括 Spring:Spring 是包含了众多⼯具⽅法的 IoC 容器。

既然 Spring 是⼀个 IoC(控制反转)容器,重点还在“容器”⼆字上,那么它就具备两个最基础的功能:

  • 将对象存⼊到容器;
  • 从容器中取出对象。

也就是说学 Spring 最核⼼的功能,就是学如何将对象存⼊到 Spring 中,再从 Spring 中获取对象的过程。

1.1 什么是IoC

Spring 是⼀个 IoC 容器,说的是对象的创建和销毁的权利都交给 Spring 来管理了,它本身⼜具备了存储对象和获取对象的能⼒。

IoCInversion of Control
翻译控制反转

控制反转,即控制权反转,对于依赖对象管理的控制权反转,把对象交给spring管理,使用的时候直接使用。

好处:将对象存储在 IoC 容器相当于将以后可能⽤的所有⼯具制作好都放到仓库中,需要的时候直接取就⾏了,⽤完再把它放回到仓库。⽽ new 对象的⽅式相当于,每次需要⼯具了,才现做,⽤完就扔掉了也不会保存,下次再⽤的时候还得重新做,这就是 IoC 容器和普通程序开发的区别。

1.2 什么是DI

DI: Dependency Injection
翻译:依赖注入

所谓依赖注⼊,就是由 IoC 容器在运⾏期间,动态地将某种依赖关系注⼊到对象之中。所以,依赖注⼊(DI)和控制反转(IoC)是从不同的⻆度的描述的同⼀件事情,就是指通过引⼊ IoC 容器,利⽤依赖关系注⼊的⽅式,实现对象之间的解耦

  • 解耦(Decoupling)是指将两个或多个紧密耦合的组件、系统或功能解开,使它们能够独立地进行操作、修改或扩展,而不会对彼此产生过多的影响。解耦的目的是降低组件之间的依赖性,增加系统的灵活性、可维护性和可扩展性。
  • 举个例子:⽐如说我今天⼼情⽐较好,吃⼀顿好的犒劳犒劳⾃⼰,那么“吃⼀顿好的”是思想和⽬标(是 IoC),但最后我是吃海底捞还是杨国福?这就是具体的实现,就是 D

IoC 是“⽬标”也是⼀种思想,⽽⽬标和思想只是⼀种指导原则,最终还是要有可⾏的落地⽅案,⽽ DI就属于具体的实现

2.Spring Boot

Spring Boot 本质上是 Spring 框架的延伸和扩展,它的诞生是为了简化 Spring 框架初始搭建以及开发的过程,使用它可以不再依赖 Spring 应用程序中的 XML 配置,为更快、更高效的开发 Spring 提供更加有力的支持。

3.Spring MVC是什么

官方描述翻译:Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。

由上可知:

  1. Spring MVC 是⼀个 Web 框架。
  2. Spring MVC 是基于 Servlet API 构建的。

它的正式名称是:Spring Web MVC

也被称为:Spring MVCSpring web

那么,什么是MVC呢?

1.MVC是什么

早期的MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构模式,它把软件系统分
模型视图控制器三个基本部分。

在这里插入图片描述

如图所示,Spring MVC就是实现了这一套架构。

  • Model(模型)是应⽤程序中⽤于处理应⽤程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
  • View(视图)是应⽤程序中处理数据显示的部分。通常视图是依据模型数据创建的。
  • Controller(控制器)是应⽤程序中处理⽤户交互的部分。通常控制器负责从视图读取数据, 控制⽤户输⼊,并向模型发送数据。

现在的MVC更合适称之为Spring web。如果想要前后端分离,那么就不适合再做view的开发。而去掉了view,MVC就变成了Spring web。

3.Spring,SpringBoot,Spring MVC的区别是什么

这三者实际上没有明确的区分。一个项目,可以是SpringMVC,又是SpringBoot,又是Spring项目。

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

SpringBoot:Spring Boot 对于Spring框架来收,是 Spring 框架的延伸和扩展,它生是为了简化 Spring 框架初始搭建以及开发的过程springBoot框架;相对于springMVC框架来说,它更专注于开发微服务后台接口,不开发前端视图,同时遵循默认优于配置,简化了插件配置流程,不需要配置xml,相springmvc,大大简化了配置流程。

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

举个例子:

Spring :假设Spring是一个高铁,车速很快但是这个高铁买票退票都很不方便,必须要去火车站。
SpringBoot:高铁(Spring)+ 12306(买票退票方便) + 周边配套设置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/785692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python实现Up数据信息采集 <内含JS逆向解密>

目录标题 前言环境使用:模块使用:实现基本流程:代码展示:尾语 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 环境使用: python 3.8 >>> 运行代码 pycharm 2021.2 >>> 辅助敲代码 模块使用: 第三方模块 需要安装 import requests >…

chapter12:SpringBoot与检索

Spring Boot与检索视频 1. 简介 我们的应用经常需要添加检索功能,开源的ElasticSearch是目前全文搜索引擎的首选。 他可以快速的存储、搜索和分析海量数据。SpringBoot通过整合Spring Data ElasticSearch为我们提供了非常便捷的检索功能支持。 ElasticSearch是一…

骨头的诱惑题解

样例输入1: 4 4 5 S.X. ..X. ..XD ....样例输出1: NO样例输入2: 3 4 5 S.X. ..X. ...D样例输出2: YES思路分析: 看到能否到达终点的题目先想 d f s dfs dfs。但这道题规定必须刚好 T T T秒到达,所…

记一次对Ghidra反编译的修复

前言 Ghidra是NSA在2019年开源的逆向工具,可以说从开源发布开始,就基本成了开源界唯一可以与 IDA 竞争的存在,其它的工具多少总是欠点意思。不过从实际情况来看,虽然 Ghidra一直在积极维护,但是现在的Bug情况跟IDA相比…

【《Azure、DevOps和微服务软件架构实战(第2版)》——教你构建并交付可满足组织业务需求的高度可扩展的企业应用程序】

本书的编写方式与很多技术书籍不同,作者站在架构师的视角,以一个项目的整个生命周期为主线,向读者展示了如何在云时代设计和实现一款软件,其内容涵盖了从软件架构设计的基本原则、需求收集、解决方案设计,可选技术架构…

扫码自测,全对有奖!《人月神话》知识自测卷01-共10题

自测链接 https://www.101test.com/cand/index?paperIdUH5KRN 最先答对全部题目的前三名将获赠清华大学出版社近年出版的新书。 请把全对(10分)的截屏发给微信号13811867132(备注:人月兑奖),并留下相关信息。 1. [单选] 在&qu…

Vue3兄弟组件之间传值-mitt

Vue3兄弟组件之间传值-使用mitt插件 环境vue3tsvite 1.安装mitt 在终端cd到项目目录运行 npm install mitt安装成功在package.json文件会有显示 2.在main.js里面全局引用 // An highlighted block import mitt from mitt app.config.globalProperties.$mitt mitt()3.此时…

低代码开源项目汇总

低代码是基于可视化和模型驱动理念,结合云原生与多端体验技术,它能够在多数业务场景下实现大幅度的提效降本,为专业开发者提供了一种全新的高生产力开发范式。 不定期汇总更新一些低代码开源项目。 1、Appsmith Appsmith 是一款开源低代码…

根据UIL下载图片/视频、根据URL自动下载图片/视频、GUI自动下载想要的图片

1,根据UIL下载图片/视频 def downForInterface(file_path):count 1value_rows []with open(file_path, encodingUTF-8) as file:f_csv csv.reader(file)for r in f_csv:value_rows.append(r)for file_path in value_rows:cunmulu if . in file_path[0]:print(cu…

Java毕业设计-汽车出租系统【含源码、论文】

前言 汽车出租管理系统: 随着当今社会科学技术的高速发展,人民的生活水平不断的提高,自由行也开始盛行。有些人为了方便,选择汽车租赁的方式出行,因此汽车租赁成为一个极具市场潜力的行业。面对日趋发展的租赁市场&a…

有向图的强联通分量-SCC-Tarjan算法

有向图的强联通分量(SCC)Tarjan算法 强连通分量(Strongly Connected Components,SCC)的定义是:极大的强连通子图。 下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达。{5},{6}也分别是两个强…

B2B2C多商户跨境电商购物网站搭建(后台采集功能)

如何部署开发一个B2B2C开源多语言多商户跨境外贸网站 随着全球化的发展,跨境外贸成为了许多企业拓展业务的重要方向。搭建一个B2B2C跨境外贸网站,将有助于实现企业的全球化经营。那么如何搭建一个B2B2C跨境外贸网站呢? 一、选择合适的开源平…

安科瑞智能照明控制系统的应用发展需求-安科瑞黄安南

【摘 要】 :随着电力电子技术的快速发展,智能照明控制技术已经成为楼宇自动化控制系统的重要组成部分,是绿色照明的发展方向。智能照明控制系统在照明节能上起到重要的作用。文章结合实际案例,探讨了智能照明控制技术在照明节能上…

OK3588的NPU加速推理resnet18—rknn_toolkit_lite2的Python语言篇

OK3588的NPU加速推理MobileNet——Python语言篇 Rknn_toolkit_lite2Miniconda安装创建虚拟环境并运行NPU加速推理代码注释 Rknn_toolkit_lite2 RKNN Toolkit Lite2 主要用于 RKNN 模型在 Rockchip NPU 上的部署。 在使用 RKNN Toolkit Lite2 之前,用户需要先通过 R…

LeetCode:面试题:消失的数字——时间复杂度

题目:数组nums中包含0~n的所有整数,但其中缺失了一个数,请写代码找出那个缺失的整数,要求在时间复杂度为O(N)的时间内完成 思路1:冒泡排序遍历(下一个数不等于上一个数1&#xff0c…

Mybatis中 #{} 和 ${} 的区别,SLQ注入

#{}:预编译处理,类似于占位符。${}:字符直接替换 预编译处理:Mybatis在处理#{}时候,会将SQL中的#{}转换为?,使⽤ PreparedStatement 的 set ⽅法来赋值。 直接替换:是MyBatis 在处理 ${} 时,就是…

浏览器调试Android App

浏览器调试Android App 1. 背景2. 调试工具3. 手机设置4. 打开浏览器(edge)5. 连接手机6. 点击inspect 开始调试 1. 背景 在工作中经常会遇到在原生app中嵌套h5, 但是在某些需要在app里面调试的内容, 却没有像chrome开发者工具这样的工具来帮助我们快速…

PDF文件转换成word软件有哪些?分享两个文件格式转换软件

在日常办公中,我们经常使用各种办公软件,其中PDF和Word是最常见的两种格式。相较于Word文件,PDF文件具有更强的兼容性和安全性,因此我们通常会选择以PDF格式分享文件。然而,如果我们需要提取PDF文件中的部分内容&#…

VPP编译安装及测试

参考:FD.io VPP环境下运行用户应用程序教程 环境 操作系统:centos7.4,且需要联网VPP版本:2009网卡:10G VPP编译 使用git clone VPP项目指定分支的代码(注意:不要使用VPP的release版本包&…

设计模式-职责链模式在Java中使用示例-采购审批系统

场景 采购单分级审批 采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审批,主任可以审批5万元以下(不包括5万元) 的采购单,副董事长可以审批5万元至10万元(不包括10万元)的…