Spring快速学习
目录
IOC控制反转
引言
IOC案例
Bean的作用范围
Bean的实例化
bean生命周期
DI 依赖注入
setter注入
构造器注入
自动装配
自动装配的方式
注意事项;
集合注入
核心容器
容器的创建方式
Bean的三种获取方式
Bean和依赖注入相关总结
IOC/DI注解开发
注解开发定义Bean
纯注解开发模式
总结从配置文件到注解开发
注解开发依赖注入
AOP
AOP的实现步骤
1.定义通知类和通知
2.定义切入点
3.制作切面
4.将通知类配给容器并标识其为切面类
Aop通知类型
Aop事务管理
怎么实现Spring的事务呢
知识点1:@EnableTransactionManagement
知识点2:@Transactional
Spring的学习主线是IOC、AOP、声明式事务
IOC控制反转
引言
目前项目中存在的问题,耦合度太高,如下例:

针对这个问题,Spring就提出了一个解决方案:
使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象
这种实现思就是Spring的一个核心概念。
- 使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。
- Spring技术对IOC思想进行了实现,Spring提供了一个容器,称为IOC容器,用来充当IOC思想中的"外部"
- IOC容器负责对象的创建、初始化等一系列工作,其中包含了数据层和业务层的类对象。
- 创建或被管理的对象在IOC容器中统称为Bean,IOC容器中放的就是一个个的Bean对象
当IOC容器中创建好service和dao对象后,程序能正确执行么?
不行,因为service运行需要依赖dao对象
IOC容器中虽然有service和dao对象
但是service对象和dao对象没有任何关系
需要把dao对象交给service,也就是说要绑定service和dao对象之间的关系
这个时候就需要用到DI(依赖注入)
在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入。
小结:
IOC:控制反转,控制反转的是对象的创建权
DI:依赖注入,绑定对象与对象之间的依赖关系Spring创建了一个容器用来存放所创建的对象,这个容器就叫IOC容器
容器中所存放的一个个对象就叫Bean或Bean对象
IOC案例
1.在配置文件中完成Bean的配置

2.怎么获取ioc容器

现在虽然解耦了,但是在 BookServiceImpl的类中依然存在 BookDaoImpl对象的
new操作,它们之间的耦合度还是比较高,这块该如何解决,就需要用到DI:依赖注入
现在的需求是在BookServiceImpl类中删除new对象的方式,使用Spring的DI完成Dao层的注入
1.为BookDao提供setter方法

配置文件中添加依赖注入的配置

name="bookDao"中 bookDao的作用是让Spring的IOC容器在获取到名称后,将首字母大写,前
面加set找对应的 setBookDao()方法进行对象注入。
ref="bookDao"中 bookDao的作用是让Spring能在IOC容器中找到id为 bookDao的Bean对象给
bookService进行注入

Bean的作用范围

怎么看一个Bean是不是单例
同一个bean获取两次,将对象打印到控制台,看打印出的地址值是否一致。一致就是单例。
将scope设置为 prototype,就是非单例了。

小结:
Bean的实例化
bean本质上就是对象,对象在new的时候会使用构造方法完成,那创建bean也是使用构造方法完成的。每一个类默认都会提供一个无参构造函数,所以其实真正在使用这种方式的时候,我们什么也不需要做。
Spring底层用的是反射
Spring的IOC实例化对象的三种方式分别是
bean生命周期

DI 依赖注入
在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入。
Spring为我们提供了两种注入方式,分别是:

setter注入
可以看下面的例子,注入的是引用类型。


那注入简单类型如何操作呢


构造器注入
构造器注入也就是构造方法注入


注入简单类型


总结;
根据前面的学习大家可以看到,编写配置文件也是非常麻烦的一件事情,那我们也可以对此进行简化,我们将使用自动装配
自动装配
IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配
自动装配的方式

如何操作呢?

注意事项;

集合注入
前面我们已经能完成引入数据类型和简单数据类型的注入,但是还有一种数据类型集合,集合中既可以装简单数据类型也可以装引用数据类型,对于集合,在Spring中该如何注入呢?
常见的集合类型有哪些?
- 数组
- List
- Set
- Map
- Properties
1.与之前没有区别的是先生成setter方法
2.

核心容器
容器的创建方式


Bean的三种获取方式
![]()
![]()
![]()

Bean和依赖注入相关总结
bean相关
依赖注入相关
IOC/DI注解开发
配置文件写的真的让人很痛苦,终于来学注解开发了
注解开发定义Bean

对应关系

最后在配置文件中写一下就行了

这样一下子可以少写很多的配置文件了
对于@Component注解,还衍生出了其他三个注解 @Controller、 @Service、 @Repository
方便我们后期在编写类的时候能很好的区分出这个类是属于 表现层、 业务层还是 数据层的类。
纯注解开发模式
就是一点点的配置文件都不写了
将配置文件applicationContext.xml删除掉,使用类来替换
修改点1:


修改点2:

总结从配置文件到注解开发
注解开发依赖注入

简单数据类型的注入

AOP
AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程
序结构。AOP是在不改原有代码的前提下对其进行增强.
在不惊动(改动)原有设计(代码)的前提下,想给谁添加功能就给谁添加。这个也就是Spring的理念
AOP 中的概念: 连接点、切入点、通知、通知类。

- 连接点(JoinPoint):程序执行过程中的任意位置,粒度为执行方法、抛出异常、设置变量等
- 切入点(Pointcut):匹配连接点的式子
- 通知(Advice):在切入点处执行的操作,也就是共性功能在SpringAOP中,功能最终以方法的形式呈现
- 通知类:定义通知的类
- 切面(Aspect):描述通知与切入点的对应关系
AOP的实现步骤
1.定义通知类和通知

2.定义切入点

3.制作切面

4.将通知类配给容器并标识其为切面类

Aop通知类型

AOP可以简化项目中的事务管理,也是一大亮点。所以我们现在来学习一下AOP事务管理
Aop事务管理
- 事务作用:在数据层保障一系列的数据库操作同成功同失败
- Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败
Spring为了管理事务,提供了一个平台事务管理器 PlatformTransactionManager。

PlatformTransactionManager只是一个接口,Spring还为其提供了一个具体的实现。

怎么实现Spring的事务呢
1.首先在需要添加事务的接口、类或者方法上添加@Transactional注解

注意:
@Transactional可以写在接口类上、接口方法上、实现类上和实现类方法上
-
写在接口类上,该接口的所有实现类的所有方法都会有事务
-
写在接口方法上,该接口的所有实现类的该方法都会有事务
-
写在实现类上,该类中的所有方法都会有事务
-
写在实现类方法上,该方法上有事务
-
建议写在实现类或实现类的方法上
2.在JdbcConfig类中配置事务管理器

3.开启事务注解
在SpringConfig的配置类中开启
@EnableTransactionManagement

知识点1:@EnableTransactionManagement
| 名称 | @EnableTransactionManagement |
|---|---|
| 类型 | 配置类注解 |
| 位置 | 配置类定义上方 |
| 作用 | 设置当前Spring环境中开启注解式事务支持 |
知识点2:@Transactional
| 名称 | @Transactional |
|---|---|
| 类型 | 接口注解 类注解 方法注解 |
| 位置 | 业务层接口上方 业务层实现类上方 业务方法上方 |
| 作用 | 为当前业务层方法添加事务(如果设置在类或接口上方则类或接口中所有方法均添加事务) |
相关文章:
Spring快速学习
目录 IOC控制反转 引言 IOC案例 Bean的作用范围 Bean的实例化 bean生命周期 DI 依赖注入 setter注入 构造器注入 自动装配 自动装配的方式 注意事项; 集合注入 核心容器 容器的创建方式 Bean的三种获取方式 Bean和依赖注入相关总结 IOC/DI注解开发 注解开发…...
【Web开发手礼】探索Web开发的秘密(十五)-Vue2(2)AJAX、前后端分离、前端工程化
主要介绍了AJAX、前后端分离所需的YApi、前端工程化所需要的环境安装!!! 目录 前言 AJAX 原生Ajax Axios Axios入门 案例 前后端分离开发 YApi 前端工程化 环境准备 总结 前言 主要介绍了AJAX、前后端分离所需的YApi、前端工…...
Phalco安装过程以及踩的一些坑(mac环境)
一 背景 公司用Phalcon框架好长时间了,中途发现了一些Phalcon使用的上的问题,于是想在本地搭建一套Phalcon的环境,方便排查问题使用。 二 Mac系统下的安装 看了很多说法,最终发现还是官网给力,安装Phalcon使用下列命令即可(前提条件是PHP已安装好,工具pecl也安装好了):…...
Ubuntu修改双系统默认启动顺序
1.打开grub的默认启动配置文件 sudo gedit /etc/default/grub# If you change this file, run update-grub afterwards to update # /boot/grub/grub.cfg. # For full documentation of the options in this file, see: # info -f grub -n Simple configurationGRUB_DEFAULT…...
高仲富:49岁搞AI,白天种菜卖菜,晚上学数学搞程序
这是《开发者说》的第13期,本期我们邀请的开发者是高仲富,曾是一位数学老师,自学成为一名程序员,在北京漂过,后逃回了成都,一边与病魔抗争,一边写代码,一写就是15年,制作…...
光线追踪(纹理映射)
最近在跟着ray trace in one week来学习光线追踪(很多概念茅塞顿开)做到一半想着记录一下(比较随心)上面是之前的效果。ray trace in one week Texture Coordinates for Spheres(球体纹理坐标) u, v 纹理…...
传统产品经理VS现在AI产品经理,你要学习的太多了,超详细收藏我这一篇就够了
传统产品经理想要转行成为AI产品经理,需要经历一系列的学习和实践过程。下面是一份详细的学习路线图,旨在帮助你顺利转型。 学习路线图 了解AI基础知识 AI概览:阅读《人工智能:一种现代的方法》这样的书籍,以获得对AI…...
C#使用Socket实现TCP服务器端
1、TCP服务器实现代码 using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks;namespace PtLib.TcpServer {public delegate void Tcp…...
MTK联发科MT8766/MT8166安卓核心板性能参数对
MT8766核心板 采用联发科四核2G主频芯片方案,国内4G全网通。12nm先进工艺,支持 Android9.0系统。 GPU 采用超强 IMG GE8300 ,主频600MHz。支持高速LPDDR4/X,主频高达1600MHz。支持EMMC5.1。标配 WIFI 802.11 ac/abgn,BT 5.0。 支持…...
ps绘制动图
ps绘制动图教程(简易版)-直播gif动态效果图 第一步 打开ps绘制几个简单的长方形 第二步 将图层转化为智能图层 第三部 在窗口找到时间轴创建时间轴 第五步 通过变换来鼠标控制图像的变化并打下结束点 第六部 通过图像中的图像大小控制gif的大小 第七部 …...
AI学习指南机器学习篇-强化学习和深度学习简介
AI学习指南机器学习篇-强化学习和深度学习简介 强化学习和深度学习基本概念回顾 强化学习是一种机器学习方法,其目标是让智能体通过与环境的交互来学习最优的行为策略。在强化学习中,智能体不需要标记的训练数据,而是通过试错来提升自己的表…...
yolov8 bytetrack onnx模型推理
原文:yolov8 bytetrack onnx模型推理 - 知乎 (zhihu.com) 一、pt模型转onnx from ultralytics import YOLO# Load a model model YOLO(weights/yolov8s.pt) # load an official model # model YOLO(path/to/best.pt) # load a custom trained# Export the mod…...
ImageNet数据集和CIFAR-10数据集
一、为什么需要大量数据集 人工智能其实就是大数据的时代,无论是目标检测、图像分类、还是现在植入我们生活的推荐系统,“喂入”神经网络的数据越多,则识别效果越好、分类越准确。因此开源大型数据集的研究团队为人工智能的发展做了大量贡献…...
Go语言编程大全,web微服务数据库十大专题精讲
本课程主要从数据结构、Go Module 依赖管理、IO编程、数据库编程、消息队列、加密技术与网络安全、爬虫与反爬虫、web开发、微服务通用技术、Kitex框架等方面讲解~ 链接:https://pan.quark.cn/s/d65337a0e60d...
【LabVIEW学习篇 - 13】:队列
文章目录 队列 队列 队列通常情况下是一种先入先出(FIFO:First in First out)的数据结构,常用作数据缓存,通过队列结构可以保证数据有序的传递,避免竞争和冲突。 案例:利用队列,模…...
大语言模型综述泛读之Large Language Models: A Survey
摘要 这篇文章主要回顾了一些最突出的LLMs(GPT, LLaMA, PaLM)并讨论了它们的特点、贡献和局限性,就如何构建增强LLMs做了一个技术概述,然后调研了为LLM训练、微调和评估而准备的N多种流行数据集,审查了使用的LLM评价指标,在一组有代表性的基准上比较了几个流行的LLMs;最…...
奇偶函数的性质及运算
目录 定义 注意 特征 运算 拓展 定义 设函数f(x)的定义域D; 如果对于函数定义域D内的任意一个x,都有f(-x)-f(x),那么函数f(x)就叫做奇函数。如果对于函数定义域D内的任意一个x…...
代码随想录 day 32 动态规划
第九章 动态规划part01 今天正式开始动态规划! 理论基础 无论大家之前对动态规划学到什么程度,一定要先看 我讲的 动态规划理论基础。 如果没做过动态规划的题目,看我讲的理论基础,会有感觉 是不是简单题想复杂了? …...
支持目标检测的框架有哪些
目标检测是计算机视觉领域的一个重要任务,许多深度学习框架都提供了对目标检测的支持。以下是一些广泛使用的支持目标检测的深度学习框架: 1. TensorFlow TensorFlow 是一个广泛使用的开源深度学习框架,由Google开发。它提供了TensorFlow O…...
原神自定义倒计时
<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><title>原神倒计时</title><style>* {margin: 0;padding: 0;box-sizing: border-box;user-select: none;body {background: #0b1b2c;}}header {…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...







