Spring——是什么?作用?内容?用到的设计模式?
目录
什么是spring?
spring是为了解决什么问题而衍生的?(历史)Spring解决了实际生产中的什么问题?
spring包含了哪些部分?(组成)
Spring的特点是什么?
spring框架中用到了哪些设计模式?
Spring相关依赖(此处只列举了一部分)
jar包下载
Spring系列文章
什么是spring?
框架: Spring作为Java企业级应用的开发框架,在spring衍生出来之前,struts、Herbert作为当时强大的框架,对于我们熟悉的三层它们分别作为了表现层和DAO层的角色,而spring出现之后解决了逻辑层和数据层的耦合问题,spring成为用来连接表现层和多层的一个身份,整合了当时主流的第三方框架,使软件变成了一个整体。并且衍生出了现在的springboot、springcloud框架,他们的底层都是以spring作为基础框架
容器:原来我们创建对象是通过new的方式去进行创建,比方说new people( ),如果要给对象的属性赋值和读取的话是通过set或者get方式,而现在使用了spring之后,用户不用在自己手动的去进行new的操作。
内部的IOC(控制反转): 将对象的创建的权利交给第三方Spring容器进行统一管理(不把对象的创建写死在类里面)。
DI(依赖注入): 为Spring容器中对象的属性赋值, 一般对象中的属性以接口最为常见 注入方式: a.set注入 b.构造注入
spring的底层使用了反射技术,通过反射这样的技术可以帮助在运行过程中动态地去获取类的属性和方法
通过AOP切面去完成,对业务方法进行扩展(松耦合)。常见应用:
- a.事务控制(减少方法冗余, 解耦 - 不用在方法里面每次声明事务开始和事务提交)
- b.日志记录
- c.安全控制(AOP/拦截器都可以实现)
- d.缓存机制
- e.异常记录
- f.记录程序运行的时间, 对方法进行分析优化
生态: Spring帮助去满足不同的需求,在spring内部也搭建了很多的框架类,这些框架类(并post Processor,并factory post processor)可以让用户自定义的去扩展,让用户按照自己的需求去搭建。正是因为底层使用了模板方法模式来帮助达到了这样一种扩展性,才能满足不同场景的一个需要
补充知识:视频:Spring的发展历史
spring是为了解决什么问题而衍生的?(历史)Spring解决了实际生产中的什么问题?
①、解决Java EE开发过程中的效率低问题。我们知道J2EE是为企业级的应用开发提供了一套严格的规范,这样一套规范在初期学习和使用的时候比较困难,对于大多数学习者来说内容不能一下子就理解,所以出现学习代价较高、开发效率较低等问题,Spring的出现就是帮助解决了这些问题使开发者开发更容易,J2EE在1999年和2000年开始的,Spring2002年紧接着就出现了。
②、我认为使用Spring框架的最大一个目的就是简化我们的开发(如何简化开发的?Spring提供了7大模块,每个模块可以相互组合应用)
spring包含了哪些部分?(组成)
- Core:核心类库,提供了IOC服务
- Context:应用上下文,提供框架式bean访问方式(要通过什么方式获取到容器提供的bean对象,如context.getbean就在其中)
- AOP:面向切面编程(配置的切点就在里面)
- DAO:对JDBC的抽象,简化了数据访问异常的处理
- ORM:对象实体映射(只需要关注实体类就好,表里面有什么字段不需要关心,配置好之后会自动把表里的字段转换成对象的实体属性值)
- Web:提供了基本的面向web的综合特性,例如多方文件上传、请求处理等都在里面
- MVC:提供面向Web应用的Model-View-Controller实现。包含了mvc设计思想
Spring的特点是什么?
轻量级,不依赖其他组件,可以单独使用
可以解决企业应用开发的复杂性(???)
核心:IOC、AOP
- IOC:控制反转,把创建对象过程交给spring进行管理
- AOP:面向切面编程,不修改源代码进行功能增强
spring框架中用到了哪些设计模式?
此处列举框架中个别地方用到的设计模式,不代表全面!!
单例模式:bean默认都是单例的
原型模式:指定作用域为prototype
工厂模式:BeanFactory
模板方法:postProcessBeanFactory,onRefresh,initPropertyValue
策略模式:XmlBeanDefinitionReader,PropertiesBeanDefinitionReader
观察者模式:listener,event,multicast
适配器模式:Adapter
装饰者模式:BeanWrapper
责任链模式:使用aop的时候会先生成一个拦截器链
代理模式:动态代理
委托者模式:delegate
Spring相关依赖(此处只列举了一部分)
<!-- spring context--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.3</version></dependency><!-- spring jdbc--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>6.0.4</version></dependency><!--mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency><!-- 德鲁伊连接依赖--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.20</version></dependency><!-- @Resource注解--><dependency><groupId>jakarta.annotation</groupId><artifactId>jakarta.annotation-api</artifactId><version>2.1.1</version></dependency><!-- junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>
jar包下载
下载地址:
JFroghttps://repo.spring.io/ui/native/release/org/springframework/spring/
里面包含了很多版本,大家可以结合自己的需求进行下载:
下载之后结果如下:
里面包含了我们常需要使用的aop、core、beans等等jar包,我们在项目中使用的时候直接引入即可。
此图为idea引入结果:
Spring系列文章:
Spring——Bean管理-xml方式进行属性注入
Spring——Bean管理-注解方式进行属性注入
Spring——什么是IOC?
Spring——AOP是什么?如何使用?
Spring——什么是事务?传播行为?事务隔离级别有哪些?
Spring——整合junit4、junit5使用方法
如果有想要交流的内容欢迎在评论区进行留言,如果这篇文档受到了您的喜欢那就留下你点赞+收藏脚印支持一下博主~
相关文章:

Spring——是什么?作用?内容?用到的设计模式?
目录 什么是spring? spring是为了解决什么问题而衍生的?(历史)Spring解决了实际生产中的什么问题? spring包含了哪些部分?(组成) Spring的特点是什么? spring框架中…...

Qt交叉编译环境搭建
环境及版本: 编译机:Deepin 20.3 Qt 5.12.9 arm编译工具: gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf.tar.xz 运行机:创龙335X开发板 1.下载arm编译工具: gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-…...
Java switch case 语句
Java 的 switch case 语句是一种常用的控制流语句,用于基于不同的输入值执行不同的操作。本文将详细介绍 Java switch case 语句的作用、用法以及在实际工作中的应用。 一、switch case 语句的作用 switch case 语句是一种多分支条件语句,它基于不同的输…...

Linux下MQTT客户端消息订阅与发布实现
MQTT(消息队列遥测传输)是一个基于客户端-服务器的消息发布/订阅传输协议。它基于TCP协议,默认端口号为1883,为此,它也需要一个消息中间件 。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下…...

代码规范----编程规约(下)
目录 四、OOP规约 五、日期时间 六、集合处理 四、OOP规约 (1)、避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可 (2)、所有的覆写方法࿰…...

c++连接mysql
开始想用mysql connector/c8.0 来操作数据库cmake加上配置后一直编译错误 我这里也没有截屏编译错误大概意思是driver.h里面声明的一个check_lib函数里面用了一个未定义的check找遍了资料都没有找到解决办法最后还是用了原始API如果有人有解决办法请留个位置先上在用的cmake配置…...

CentOS7操作系统安装nginx实战(多种方法,超详细)
文章目录前言一. 实验环境二. 使用yum安装nginx2.1 添加yum源2.1.1 使用官网提供的源地址(方法一)2.1.2 使用epel的方式进行安装(方法二)2.2 开始安装nginx2.3 启动并进行测试2.4 其他的一些用法:三. 编译方式安装ngin…...

【测绘程序设计】——空间直角坐标转换
测绘工程中经常遇到空间直角坐标转换——比如,北京54(或西安80)空间直角坐标转换成CGCS2000(或WGS-84)空间直角坐标,常用转换模型包括:①布尔沙模型(国家级及省级范围);②莫洛坚斯基模型(省级以下范围);③三维四参数(小于22局部区域) 等。 本文分享了基于布…...

数组--java--动态数组--有序数组--底层
java数组基础--java中的数组创建数组空间占用初始化数组访问元素插入查找删除元素动态数组扩容插入和添加重写toString删除二维数组二维数组注意点有序数组实现测试写在开头: 这篇文章包括数组的基础、一点底层的内容和一些稍微深入的东西。 作为第一个深入学习的数…...

Linux下使用C语言实现简单的聊天室程序
本文章介绍一种基于Linux使用C语言实现简单的局域网聊天室程序的方法,支持消息群发,历史数据查询,好友列表查看,好友上线下线提醒等功能。聊天界面如下图所示:下面将按步骤介绍该系统的设计实现,首先在linu…...
【数学】任意一个正整数n最多只有一个质因数大于根号n,怎么证明?
定理 任意一个正整数n最多只有一个大于n\sqrt{n}n的质因子,并且该大于n\sqrt{n}n质因子的幂次是1。 证明(反证法) 证明:最多只有一个大于n\sqrt{n}n的质因子 假设n存在两个大于n\sqrt{n}n的质因子,分别为p…...
【ES6】var let const 之面试题系列
关于 var、let、const 是前端开发人员经常用到的关键字,也是经典的面试题,接下来就站在面试题的角度来看待它们之间的区别。 一、区别 1. var 声明的范围是函数作用域,let 和 const 声明的范围是块作用域,块作用域是函数作用域的…...

Vue基础入门讲义(四)-组件化
文章目录1.引言2.定义全局组件3.组件的复用4.局部注册5.组件通信5.1.父向子传递props5.2.传递复杂数据5.3.子向父的通信1.引言 在大型应用开发的时候,页面可以划分成很多部分。往往不同的页面,也会有相同的部分。例如可能会有相同的头部导航。 但是如果…...

Android onLayout布局流程解析
组件布局流程结论 1.)layout流程始于ViewRootImpl的performLayout()方法,该方法会调用根View(DecorView)的layout()方法进行布局,因为DecorView是ViewGroup(FrameLayout),所以layout流程来到了ViewGroup(其…...

浅分析BIG-建筑展示系统
一、主页(主要界面)重点疑点(需要解决)1.云平台实时同步。是否可以电脑与hololens2同步或链接?并可以传输信息提醒?一级界面(启动界面)1.交互式启动激活效果(触发按钮旋转…...

模电基础(1) 半导体基础知识
基本内容: 1.本征半导体的基本介绍结构; 2.杂质半导体; 3.PN结的形成; 4.PN结的性质。 1.本征半导体 半导体:导电性能介于绝缘体和导体之间的物质。 本征半导体是纯净的晶体结构的半导体。 纯净→无杂质晶体结构→稳…...
阅读笔记:TF - IDF 原理
今天查阅 TF-IDF 资料,发现百度百科里面提供了一个例子,解释的很清楚,记下来备用。 原文链接:https://baike.baidu.com/item/tf-idf/8816134?fraladdin 例子:在某个一共有一千词的网页中 “原子能”、“的” 和 “应…...

【C语言】float 关键字
🚩write in front🚩 🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🏅2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4…...
Linux 网络编程(实现多路IO转接服务器)
1.select函数实现多路IO转接服务器select函数原型:包含在头文件<sys/time.h>,<sys/types.h>和<unistd.h>int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);作用:确定…...

DC-4 靶场学习
信息搜集: 首先获取靶场ip,和之前一样。 arp-scan -l nmap -sP 192.168.28.0/24然后访问。 发现需要登录。 漏洞分析: 直接用bp爆破,爆破出来密码为happy,登录。 发现执行了命令,抓包。 修改命令可以执行ÿ…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...