Spring 重点知识总结(三)——AOP

前言

        基于黑马《SSM框架教程》的学习笔记,附链接:SSM框架教程

1 AOP 核心概念

AOP :(Aspect Oriented Programming)面向切面编程,是一种编程范式,负责指导开发者组织程序结构

同 OOP (Object Oriented Programming)面向对象编程一样,是一种思想

Spring 理念:无入侵式编程

作用:不惊动原始设计的基础上为其进行功能增强

【过程描述】

       首先先找到程序中间的共性功能,抽出来写一个通知类,在通知类中定义一个方法,这个方法叫通知,抽出来以后并不是所有的方法都要去执行通知,找出执行对应通知的方法,定义为切入点,也就是说连接点式所有方法,切入点是匹配的某些方法,将通知和切入点进行绑定的东西叫做切面,切面描述的是在哪个切入点上执行哪些通知。AOP中的面向切面编程所指的就是这个切面。

2 AOP 作用

AOP的作用包括:

  1. 分离关注点:AOP可以将与业务逻辑无关的横切关注点(如日志记录、性能监控、事务管理等)从业务逻辑中分离出来,使得业务逻辑更加清晰和简洁。

  2. 提高代码复用性:AOP可以将横切关注点作为独立的模块,可以在不同的地方进行重复使用,从而提高代码的复用性。

  3. 提高代码的可维护性:通过AOP可以将横切关注点集中管理,当需要修改或添加新的横切关注点时,可以更加方便和快速地进行修改。

  4. 提高系统的灵活性:AOP可以使系统的各个模块之间的耦合度减小,从而使得系统更加灵活,能够更加容易地进行扩展和变更。

       总之,AOP的作用在于通过分离和聚合横切关注点,提高代码的模块化和可维护性,从而使得软件开发更加高效和灵活。

3 AOP 入门案例

需求:在接口执行前输出当前系统时间

开发模式:XML 及 注解【以后开发使用注解,所以这里用注解】

思路分析:

1、导入坐标(pom.xml)

2、制作连接点方法(原始操作,Dao接口与实现类)

3、制作共性功能(通知类与通知)

4、定义切入点

5、绑定切入点与通知关系(切面)

  6、定义通知类受 Spring 容器管理,并定义当前类为切面类

【注】Aspect:让里面的东西生效, 说明下面的内容是作为 AOP 的

7、 在 Spring 核心配置中开启 Spring 对 AOP 注解驱动支持

4 AOP 工作流程

1、Spring 容器启动

2、读取所有切面配置中的切入点

3、初始化bean,判断bean 对应的类中的方法是否匹配到任意切入点

        匹配失败,创建对象

        匹配成功,创建原始对象(目标对象)的代理对象

目标对象(Target):原始功能去掉共性功能对应的类产生的对象,这种对象时无法直接完成最终工作的。

代理:目标对象无法直接完成工作,需要对其进行功能回填,通过原始对象的代理对象实现,可以实现增强操作。

SpringAOP 的本质:代理模式

4、获取 bean 方法,调用方法并执行,完成操作

        获取的 bean 是代理对象时,根据代理对象的运行模式运行原始方法与增强的内容,完成操作。 

5 AOP 切入点表达式

切入点:要进行增强的方法

切入点表达式:要进行增强的方法的描述方式

所谓表达式,并不唯一,例如这里列举的两种表述方法的描述方式:

5.1 语法格式

        动作关键字(访问修饰符   返回值  包名.类/接口名.方法名(参数)异常名)

5.2 通配符

5.3 书写技巧

6 AOP 通知类型

        AOP 通知描述了抽取的共性功能,根据共性功能抽取的位置不同,最终运行代码时要将其加入到合理的位置。

6.1 前置通知

6.2 后置通知

6.3 环绕通知【重点】

【注】如果没有使用 ProceedingJoinPoint 对原始方法进行调用,就会产生一种对原始操作进行隔离的效果,这个可以帮助我们做权限校验

6.4 返回后通知【了解】

6.5 抛出异常后通知【了解】

7 案例1:测量业务层接口万次执行效率

优化:

【注】通过 signature 可以拿到哪个接口对应哪个方法执行的

8 AOP 通知获取数据 

8.1 获取原始操作的参数

8.2 获取原始操作的返回值

8.3 获取原始操作的异常【了解】

9 案例2 百度网盘密码数据兼容处理

10 Spring 事务

10.1 简介

事务作用:在数据层保障一系列的数据库操作同成功或同失败

Spring 事务作用:在数据层或业务层保障同一系列的数据库操作同成功同失败

【注】业务层实际组合了若干数据层的功能,在业务层开事务可以保障调用的多个数据层操作处理同一个事物,同成功同失败

10.2 案例 银行账户转账

需求:实现任意两个账号间转账操作

需求微缩:A账户减钱,B账户加钱

步骤:

【注】

①Spring 注解式事务通常添加在业务层接口中而不会添加到业务层实现类中,降低耦合

②注解式事务可以添加到业务方法上表示当前方法开启事务,也可以添加到接口上表示当前接口所有方法开启事务

【注】MyBatis 框架使用的是 JDBC 事务

11 Spring 事务角色

事务管理员:发起事务方,在 Spring 中通常指代业务层开启事务的方法

事务协调员:加入事务方,在 Spring 中通常指代数据层方法,也可以是业务层方法

12 Spring 事务相关配置

12.1 事务配置

【注】如果程序出现如下两种异常,就会做事务回滚,否则不回滚:① Error 系;② 运行时异常,所以在转账业务的案例中就需要设置事务回滚异常

12.2 案例:转账业务追加日志

分析:日志应该单独开启一个新事务,否则它和转账操作是同成功同失败,即一旦转账失败,日志将不会更新 

处理过程: 

12.3 事务传播行为

事务传播行为:事务协调员对事务管理员所携带事务的处理态度

通过设置事务传播行为,让事务的协调员可以具有不同的事务特征,具体设置类型有:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI图像生成模型LCMs: 四个步骤就能快速生成高质量图像的新方法

在最新的AI模型和研究领域,一种名为Latent Consistency Models(LCMs)的新技术正迅速推动文本到图像人工智能的发展。与传统的Latent Diffusion Models(LDMs)相比,LCMs在生成详细且富有创意的图像方面同样出色,但仅需1-…

python打包部署脚本

linux可使用expect来实现自动交互,windows想要写出同样的功能脚本,只能使用python或者安装ActiveTcl 1、安装python Microsoft Store搜索python直接安装,默认会直接添加到环境变量https://www.python.org/官网下载,点击安装时会提…

初识MySQL(一)(创建数据库,查看删除数据库,备份和恢复,创建表,数据类型)

目录 客户端 ------> MySQL服务(3306) 数据库三层结构-破除MySQL神秘 创建数据库 查看删除数据库 备份恢复数据库 创建表 MySQL常用的数据类型(列类型) ​编辑 ​编辑整型 bit类型 小数类型 字符串类型 日期类型的使用 客户端 ------> MySQL服务(3306) 连接…

【斗破年番】毒宗决战万蝎门,小医仙惨遭背叛,斗宗巅峰蝎毕岩

Hello,小伙伴们,我是小郑继续为大家深度解析国漫资讯。 深度爆料斗破年番第七十话剧情解析,万蝎门宗主蝎毕岩,也算是这片大陆上的一小小块势力。一年前,他曾与小医仙正面交锋,即使当时的蝎毕岩已经站在了四星斗宗&…

2023年【广东省安全员B证第四批(项目负责人)】考试及广东省安全员B证第四批(项目负责人)试题及解析

题库来源:安全生产模拟考试一点通公众号小程序 广东省安全员B证第四批(项目负责人)考试考前必练!安全生产模拟考试一点通每个月更新广东省安全员B证第四批(项目负责人)试题及解析题目及答案!多…

若依系统富文本框上传图片报错!

报错如下: 原因:如图,富文本路径中存在 / 字符,导致上传出错。 解决方案:将富文本框内容在前端进行加密,后端再解密。 前端: 安装 crypto-js 插件 npm install crypto-js 创建工具类 :在 sr…

阿里云国际站:应用实时监控服务

文章目录 一、阿里云应用实时监控服务的概念 二、阿里云应用实时监控服务的优势 三、阿里云应用实时监控服务的功能 四、写在最后 一、阿里云应用实时监控服务的概念 应用实时监控服务 (Application Real-Time Monitoring Service) 作为一款云原生可观测产品平台&#xff…

微服务拆分的一些基本原则

文章首发公众号:海天二路搬砖工 单一职责原则 什么是单一职责原则 单一职责原则原本是面向对象设计中的一个基本原则,它指的是一个类只负责一项职责,不要存在多于一个导致类变更的原因。 在微服务架构中,一个微服务也应该只负…

使用vitis调试时debug按钮灰化无法进行操作

问题 使用vitis调试时debug按钮灰化无法进行操作。 原因 bitstream文件配置有误。 解决办法 重新配置正确的bitstream文件,如下:

Vue基础之组件通信(二)

个人名片: 😊作者简介:一名大二在校生 🤡 个人主页:坠入暮云间x 🐼座右铭:懒惰受到的惩罚不仅仅是自己的失败,还有别人的成功。 🎅**学习目标: 坚持每一次的学习打卡 文章…

通过实例fpmarkets讲解三智者交易策略

今天fpmarkets和大家一起用实例解释三智者交易策略。 在每日BTCUSD图中,椭圆形区域标志着多头反转棒线。它创下了当地新低,但收盘时接近最高点。它标志着下半年的市场情绪更加乐观。酒吧在鳄鱼嘴的外面。 多头进场放在多头发散棒顶部上方。在这里fpmarke…

深度神经网络算子参数量和计算量分析—卷积篇

前言 在用于计算机视觉任务的深度神经网络模型中,卷积算子作为一种重要的特征提取方式被广泛应用,本文针对常见的卷积算子参数量和计算量的计算方法进行分析,主要包括普通卷积、深度可分离卷积、分组卷积,以及自动计算模型参数量和…

【Cookie 和 session 的区别】

会话(Session) 跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。cookie和session都是用来跟踪浏览器用户身份的会话方式。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。 我们目前使用…

游戏AI:游戏开发和运营的新增长点

游戏AI(Game AI)是指在游戏开发运营的过程中模拟人类玩家或创建虚构性对手行为的人工智能技术。游戏AI的目标是增强游戏的互动性、可玩性和挑战性,使游戏中的角色能够智能地做出决策和行为。在游戏的开发和运营过程中使用人工智能技术&#x…

热敏电阻B值含义

1.B值(材料常数) 也称为β值,该热敏电阻规格是NTC热敏电阻的电阻与温度之间关系的特定曲线。它是一个描述热敏电阻材料物理特性的参数,也是热灵敏度指标,B值越大,表示热敏电阻器的灵敏度越高。应注意的是&a…

如何利用反欺诈(羊毛盾)API提升电商平台交易安全性?

前言 近年来,随着网络交易的普及和互联网金融的快速发展,各类网络欺诈事件层出不穷。面对这些问题,电商平台必须采取有效的措施来保障交易安全。而反欺诈(羊毛盾)API正是一种高效、智能的解决方案,能够帮助…

postswigger 靶场(CSRF)攻略-- 2.令牌验证

靶场地址: What is CSRF (Cross-site request forgery)? Tutorial & Examples | Web Security Academy (portswigger.net)https://portswigger.net/web-security/csrf 令牌(token)验证取决于请求方法 题目中已告知易受攻击的是电子邮件的更改功能&#xff0…

web自动化框架之四测试报告的搭建

现状: 看过前面的文章,楼主用的是python,所以在搭建测试报告这块的时候使用的是unittesthtmlTestRunner;然后发现生成出来的报告,总是有那么不完美的地方,比如想增加图片,比如显示风格改变下&a…

DBever连接PG库

一、简介 DBeaver是一种通用数据库管理工具,适用于需要以专业方式使用数据的每个人;适用于开发人员,数据库管理员,分析师和所有需要使用数据库的人员的 免费(DBeaver Community) 的多平台数据库工具,支持 Windows、Li…

【哈夫曼树的构造和查找最小的的权值结点代码,哈夫曼编码的算法实现】

文章目录 哈夫曼树的构造和查找最小的的权值结点代码哈夫曼编码思想哈夫曼编码的算法实现 哈夫曼树的构造和查找最小的的权值结点代码 #include<iostream> using namespace std;typedef struct {int parent, lch, rch;//双亲结点和孩子结点的下标int weight;//权值 }htN…