Spring简述
- Sping是什么
- Spring主要模块
- IOC
- DI依赖注入的三种方式
- AOP
- 术语
Sping是什么
Spring是一个轻量级的开源框架,主要作用是为了简化开发,它以IOC(控制反转)和AOP(面向切面编程)为内核
Spring主要模块
我们一般说 Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发
1.核心容器(Spring Core
):提供Spring框架的基本功能
,以bean的方式组织和管理Java应用中的各个组件及其关系。
2.应用上下文(Spring Context
):实现了ApplicationContext接口
,拓展了核心容器,提供事件处理、国际化等功能。
3.Spring面向切面编程(Spring AOP
):提供切面支持
,是个轻量级的容器。通过使用Spring AOP,可以将声明性事务管理集成在应用程序中。
4.JDBC和DAO模块(Spring DAO
):提供对JDBC的支持,还提供了DAO的支持,提供事务支持
。
5.对象实体映射(Spring ORM
):指对象实体映射。Spring插入了若干个ORM框架,提供了ORM对象的关系工具
。
6.Web模块(Spring Web
):拓展了Spring上下文,提供Web应用上下文,对Web开发提供功能上的支持
。
7.MVC模块(Spring Web MVC
):是一个全功能的MVC实现,通过策略接口,编程高度可配置
。
IOC
控制反转IoC(Inversion of Control),是一种设计思想
,DI(依赖注入)是实现IoC的一种方法
,也有人认为DI只是IoC的另一种说法
Spring容器在初始化时先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中
,程序使用时再从Ioc容器中取出需要的对象
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)
举个例子,姐姐结婚,需要筹备婚礼的各种事宜,比如选购婚纱、订婚宴、找化妆师等等。在没有使用IOC
的时候,这些事情需要你亲自去处理
。但是当你开始使用IOC
的时候,你就可以委托一个婚庆公司
来帮助你处理婚礼筹备的事务,你只需要告诉婚庆公司你的需求和预算,他们会负责为你安排婚纱、宴会预定、化妆师等等,你不再需要亲自去处理每一个细节,而是将控制权交给了婚庆公司。
其中,婚庆公司就是一个IOC容器。它接管了婚礼筹备的过程,你只需要告诉它需求,它就会为你安排。同样的,在我们开发当中,IOC容器也可以帮助我们管理对象的创建和依赖关系。我们只需要告诉IOC容器我们需要的对象和依赖
,它会负责创建和注入这些对象
,我们无需自己控制每一个细节。这样,就简化了开发过程
,降低了耦合性
,也提高了代码的可测试性和可维护性
,我们也可以专注于业务逻辑的实现
,从而提高开发效率
。
DI依赖注入的三种方式
所谓的依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程
(将依赖关系注入到对象中)
在上述例子中,姐姐结婚需要化妆师吧,而化妆师就是一个依赖,在没有使用依赖注入的情况下,你需要自己去找一个化妆师,当你使用依赖注入时,你只需要将你需要化妆师告诉婚庆公司,然后婚庆公司会选择一个合适的化妆师,将这个化妆师实例注入到婚礼筹备的流程中
spring的依赖注入有3种方式
- set注入
- 通过
setXxx()方法注入Bean的属性值或依赖对象
,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入是实际应用中最常采用的注入方式
- 通过
- 构造器注入
- 构造函数注入是除属性注入之外的另一种常用的注入方式,它
保证一些必要的属性在Bean实例化时就得到设置
(construct是bean生命周期的第一步,实例化bean),并且确保了Bean实例在实例化后就可以使用
- 构造函数注入是除属性注入之外的另一种常用的注入方式,它
- 自动装配
- 依赖注入的本质就是装配——自动装配:spring可以使用
xml和注解来进行自动装配
。自动装配就是开发人员不必知道具体要装配哪个bean的引用,这个识别的工作会由spring来完成,自动装配就是为了将依赖注入“自动化”的一个简化配置的操作
- 依赖注入的本质就是装配——自动装配:spring可以使用
AOP
AOP(Aspect Oriented Programming)意为:面向切面编程
,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离
,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
举个例子,姐姐结婚,你希望在姐姐结婚的过程中,能够自动触发一些特定的行为,比如发送祝福短信、安排婚礼摄影师等,这个时候,我们就可以使用AOP来实现。
我们可以定义一个安排婚礼摄影师的切面,里面有相关的方法,我们可以将这个切面与姐姐结婚的业务逻辑代码进行织入,从而实现在姐姐结婚的时候自动安排婚礼摄影师的功能。如此,无论是新增或修改什么东西,我们只需要修改对应的切面,而不需要修改姐姐结婚的业务逻辑代码。这样就实现了横向关注点的分离
,通过将通用的横切关注点(如发送祝福短信、安排婚礼摄影师)从姐姐结婚的业务逻辑中抽离
出来,通过AOP框架实现与业务逻辑的织入,从而实现对姐姐结婚过程的增强,提高了代码的可维护性和可扩展性
术语
横切关注点
:跨越应用程序多个模块的方法或功能。即是,与我们业务逻辑无关的,但是我们需要关注的部分,就是横切关注点。如日志 , 安全 , 缓存 , 事务等等 …切面
(ASPECT):横切关注点 被模块化 的特殊对象。即,它是一个类。通知
(Advice):切面必须要完成的工作。即,它是类中的一个方法。目标
(Target):被通知对象。代理
(Proxy):向目标对象应用通知之后创建的对象。切入点
(PointCut):切面通知 执行的 “地点”的定义。连接点
(JointPoint):与切入点匹配的执行点。
相关文章:

Spring简述
Sping是什么Spring主要模块IOCDI依赖注入的三种方式 AOP术语 Sping是什么 Spring是一个轻量级的开源框架,主要作用是为了简化开发,它以IOC(控制反转)和AOP(面向切面编程)为内核 Spring主要模块 我们一般…...

框框大学之——教育技术学
清一色劝退的教育技术学。。。。。。 https://www.kkdaxue.com/?current1&major%E6%95%99%E8%82%B2%E6%8A%80%E6%9C%AF%E5%AD%A6&pageSize10&sortFieldcreateTime&sortOrderdescend 总结: 1 杂而不经 2 摆烂劝退居多 3 适合躺平 4 考公不行 5 要多…...

Android中的Apk 包体优化
Android中的Apk 包体优化 在Android中,APK包体优化指的是减小应用程序的安装包大小,以降低用户下载和安装应用的成本,提高用户体验。APK包体优化对于应用的性能、启动速度和用户留存率都有着重要的影响。下面展开说说一些常见的APK包体优化策…...

Java基础接口详解
Java基础接口详解 文末附上下载详解pdf链接 实现java代码中接口详细分析 Java基础接口是一种定义了一组方法签名但没有提供实际实现的抽象类似的结构。它们允许类通过实现接口来声明自己拥有某些特定的行为。接口在Java中扮演了重要的角色,以下是一些关键点…...

CCL 2023 电信网络诈骗案件分类评测-第一名方案
1 任务内容 1.1 任务背景 2022年12月1日起,新出台的《反电信网络诈骗犯罪法》正式施行,表明了我国治理当前电信网络诈骗乱象的决心。诈骗案件分类问题是打击电信网路诈骗犯罪过程中的关键一环,根据不同的诈骗方式、手法等将其分类ÿ…...

go test
关于go test 报错 command-line-arguments go test 直接调用被测试go文件方法时候报错 command-line-arguments [command-line-arguments.test],这里已经明确指出了命令参数问题 PS E:\code\mqtt> go test .\client_test.go # command-line-arguments [comma…...

401 · 排序矩阵中的从小到大第k个数
链接:LintCode 炼码 - ChatGPT!更高效的学习体验! 题解: 九章算法 - 帮助更多程序员找到好工作,硅谷顶尖IT企业工程师实时在线授课为你传授面试技巧 class Solution { public:/*** param matrix: a matrix of intege…...

进程什么时候会进入阻塞状态
等待I/O操作:当进程需要进行输入/输出操作,但是所需的数据还没有准备好或者输出设备还没有空闲时,进程会进入阻塞状态,等待I/O操作完成。 等待资源:当进程需要访问共享资源,但是该资源已经被其他进程占用时…...

炸裂,靠“吹牛”过京东一面,月薪40K
说在前面 在40岁老架构师尼恩的(50)读者社区中,经常有小伙伴,需要面试美团、京东、阿里、 百度、头条等大厂。 下面是一个5年小伙伴成功拿到通过了京东一面面试,并且最终拿到offer,月薪40K。 现在把面试…...

awk基础知识和案例
文章目录 awk1 awk用法入门1.1 BEGIN和END语句块1.2 awk语法1.2.1 常用命令选项1.2.2 awk变量内置变量自定义变量 1.3 printf命令1.3.1 格式1.3.2 演示 1.4 操作符 2 awk高阶用法2.1 awk控制语句(if-else判断)2.2 awk控制语句(while循环)2.3 awk控制语句(do-while循环)2.4 awk控…...

重型并串式液压机械臂建模与simscape仿真
一、建模 Hydraulic manipulator Figure 1 shows different constituting parts of the manipulator considered, with every part labeled using numbers from 1 to 10. For each part, a CAD model is provided. Each file is named in accordance with the corresponding la…...

zookeeper的部署
一 先下载zookeeper 二 解压包 三 修改配置文件 四 把配好文件传到其他的节点上面 五 在每个节点的dataDir指定的目录下创建一个 myid 的文件 六 配置zook的启动脚本 七 设置开机自启 八 分别启动 九查看当前状态service zookeeper status 十 总结 一 先下载zookeeper …...

css white-space属性
先看不换行的效果,调用.space类 再来看使用 white-space:nowrap的效果 运行结果如下:...

(十四)大数据实战——hadoop集群一键式高可用实现自动故障转移与故障初始化恢复
前言 本节内容延续前面几节内容,综合性的实现hadoop集群的高可用以及hadoop集群故障初始化的恢复,通过一个脚本,实现整个集群的高可用启停与状态观测。主要是zookeeper、hdfs、yarn等服务的高可用集群的一键式启停。 正文 hadoop高可用集群整体规划hadoop高可用集群服务规…...

算法-归并排序
给你一个整数数组 nums,请你将该数组升序排列。 输入:nums [5,2,3,1] 输出:[1,2,3,5] 输入:nums [5,1,1,2,0,0] 输出:[0,0,1,1,2,5] 实现思路直接看我录制的视频吧算法-归并排序_哔哩哔哩_bilibili class Solutio…...

【深度学习】StyleGANv2 2019 论文,Analyzing and Improving the Image Quality of StyleGAN
StyleGAN论文: 《A Style-Based Generator Architecture for Generative Adversarial Networks》 论文:https://arxiv.org/abs/1812.04948 代码: https://github.com/NVlabs/stylegan StyleGANv2论文: 《Analyzing and Improving …...

【AI模型系列】火力全开!百度文心3.5三大维度、20项指标国内问鼎!
目录 写在前面 详细介绍 综合性能评估结果 安全合规方面 写在前面 近日,清华大学新闻与传播学院沈阳团队发布《大语言模型综合性能评估报告》(下文简称“报告”)。 报告显示百度文心一言在三大维度20项指标中综合评分国内第一,…...

C++ 多态性——运算符重载
**多态是指同样的消息被不同类型的对象接收时导致不同的行为。**所谓的消息是指对类的成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数。 使用同样的“”,就实现了整数之间、浮点数之间、双精度浮点数之间的加法࿰…...

Java设计模式---工厂方法(Factory Method)模式
说明 工厂方法(Factory Method)模式是一种工厂模式,也叫多态性工厂(Poloymorphic Factory)模式。 工厂方法模式涉及如下角色: 抽象工厂角色:给出具体工厂角色必须实现的接口。具体工厂角色&a…...

MySQL的关键指标及采集方法
MySQL 是个服务,所以我们可以借用 Google 四个黄金指标的思路来解决问题。 1、延迟 应用程序会向 MySQL 发起 SELECT、UPDATE 等操作,处理这些请求花费了多久,是非常关键的,甚至我们还想知道具体是哪个 SQL 最慢,这样…...

协程怎么解释?Python 中的协程如何实现?Celery 的协程并发引擎如何实现?
文章目录 1. 协程怎么解释?2. 为什么叫协程?3. coroutine 怎么读?4. asyncio 和 gevent 怎么实现协程?4. celery 并发引擎是什么?如何改为协程?5. 一个 celery 服务是否可以同时使用多个不同的引擎? 1. 协…...

Linux:shell脚本:基础使用(2)
test命令 格式1:test 条件表达式 格式2:[ 条件表达式 ] (前后至少应有一个空格) 常用的测试操作符 -d:测试是否为目录(Directory) -e:测试目录或文件是否存在(Exist) -f:测试是否…...

Mir 2.14 正式发布,Ubuntu 使用的 Linux 显示服务器
Canonical 公司最近发布了 Mir 2.14,这是该项目的最新版本。 Mir 2.14 在 Wayland 方面通过 ext-session-lock-v1 协议增加了对屏幕锁定器 (screen lockers) 的支持,并最终支持 Wayland 拖放。此外还整合了渲染平台的实现,放弃了之前在 Raspb…...

合规管理,企业生存之本!这4大方法,助你规避风险
当下,合规管理已成为企业必修的一门学问。无论是上市公司还是民营企业,都面临着日益严苛的监管合规要求。然而,许多企业在在应对频繁更新的合规要求时,仍然手忙脚乱,合规工作参差不齐。 专家分析认为,企业合规困境的主要症结在于,业务运转过程中产生了大量证明文件,但企业对其…...

码云 Gitee + Jenkins 配置教程
安装jdk 安装maven 安装Jenkins https://blog.csdn.net/minihuabei/article/details/132151292?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132151292%22%2C%22source%22%3A%22minihuabei%22%7D 插件安装 前往 Manage Jen…...

Java重启
Java启动! 前言祖师爷高斯林老爷子冯诺依曼 注释单行注释多行注释文档注释 标识符***【硬性规则】******【软性建议】*** 关键字结尾 前言 其实我在写这篇文章的时候已经完整地学过一遍Java校招需要掌握的大部分知识了,但是在最近找实习的过程中,我发现自己对于一些只是还是模…...

ReactNative 学习笔记
学习使用的开发工具 编译器 VSCode 开发语言工具 TypeScript 重要程度分类 一般 这个程度的知识点主要是达到熟练掌握即可,不用太深入研究和学习。 重要 这个程度的知识点主要是达到熟练掌握,并且内部的原理切要熟记,因为会关联到其他的知…...

小研究 - MySQL 数据库下存储过程的综合运用研究
信息系统工程领域对数据安全的要求比较高,MySQL 数据库管理系统普遍应用于各种信息系统应用软件的开发之中,而角色与权限设计不仅关乎数据库中数据保密性的性能高低,也关系到用户使用数据库的最低要求。在对数据库的安全性进行设计时…...

CentOS 7 构建 LVS-DR 群集 nginx负载均衡
1、基于 CentOS 7 构建 LVS-DR 群集。 DS(Director Server):DIP 192.168.231.132 & VIP 192.168.231.200 [root132 ~]# nmcli c show NAME UUID TYPE DEVICE ens33 c89f4a1a-d61b-4f24-a260…...

ESP32学习笔记(52)————三轴加速度ADXL345使用(SPI方式)
一、简介 ADXL345 是一款 ADI 公司推出的基于 iMEMS 技术的超低功耗3轴加速度计,分辨率高(13位),测量范围达 16g。数字输出数据为 16 位二进制补码格式,可通过 SPI(3线或4线) 或 I2C 数字接口访问。ADXL345 非常适合移动设备应用。它可以在倾…...