JavaWeb开发05-事务管理-AOP概述-AOP通知类型-通知顺序-切入点表达式-连接点-案例

ops/2024/9/23 7:20:52/

一、事务管理

1.事务回顾

2.Spring事务管理

删除部门和删除部门下的员工应该绑定在一起,但是如果这两个操作之间出现错误,就会执行删除部门不删除员工,所以需要使用事务将两个任务绑定在一起,要么一起成功要么一起失败

Spring中如何使用事务:

注解可以加在方法、类、接口上,但是在项目中经常加在多次数据访问增删改的方法上

3.事务进阶

①rollbackFor

这样配置rollbackFor就可以所有异常都回滚

②propagation

在解散部门方法是使用事务,在解散部门方法中要有个方法记录操作日志,也是使用了事务,但是这个方法无论解散部门方法是否执行成功都要执行。

如果是REQUIRED就会加入之前方法的事务中,但是如果之前的事务出现错误回滚了,后面的方法也会回滚,就算放在try-finally中也会回滚

设置为REQUIRES_NEW会给后面的方法设置新的事物。

二、AOP-基础

1.AOP概述

就是要对特定方法执行相同的操作,进行模板程序,基于动态代理

2.AOP快速入门

编辑AOP程序

编写AOP程序要交给IOC容器进行管理,加上@Aspect注解就是AOP程序
在@Around中就是代表哪些方法需要进行编程

3.AOP核心概念

AOP执行流程:

在程序运行的时候会自动为目标对象创建一个代理对象,在这个对象中就会对目标对象中的方法进行增强,就会将AOP程序中绿色部分和目标对象的红色方法原始程序结合在一起,在程序运行的时候就不注入目标对象注入的是代理对象,运用的方法是代理对象的方法。

三、AOP-进阶

1.通知类型

如果切入点表达式很多都一样,有不同类型的通知类型的方法,可以对切入点表达式进行抽取

使用@Pointcut注解

只要把这个方法设置成public就可以在其他类中的AOP程序中引用这个切点表达式

2.通知顺序

可以通过加注解来改变顺序

3.切入点表达式

①execution表达式

包名类名不建议省略

execution通配符:

第一个*代表任意返回值,第二个*代表第二级任意包,第三个*代表该包下任意接口或类,第四个*代表任意方法中方法名中以update开头的方法,第五个*代表任意类型的有且仅有的一个参数。

第一个..代表任意层级的包,第二个..代表任意个数的参数

②annotation表达式

创建一个自己的注解,加在所需要的切入点上

4.连接点

在Around通知中就需要ProceedingJoinPoint

对于其他四种通知只能使用JoinPoint

四、AOP案例

通过AOP方法中传入的ProceedingJoinPoint对象就可以获取连接点的信息,通过注入的HttpServletRequest对象获取JWT令牌中的信息,知道当前操作对象,并封装到operatorLog对象中。然后调用mapper层中insert向日志表中添加数据。

切面类:


http://www.ppmy.cn/ops/2439.html

相关文章

使用 Qt 设计师给工具栏添加图片按钮(来自ChatGPT)

使用Qt Designer给工具栏添加图片按钮是一个直观且简单的过程。下面是详细步骤: 打开Qt Designer 并创建或打开一个已有的窗口界面文件(通常以.ui结尾)。 添加工具栏(如果尚未添加):如果主窗口没有工具栏&…

2024mathorcup数学建模A题思路

整体来说这个题就两个步骤,第一是训练一个响应面模型,输入是附表1中两个小区的PCI值,输出是附表2和附表3中的冲突、混淆和干扰的MR数值,需要训练3个响应面模型,这里就直接用所有小区的来做,也方便三四问&am…

微信小程序:限制表单多次提交(变量限制+防抖)

方法一&#xff1a;变量限制 设置一个变量&#xff0c;在提交表单前设置为false&#xff0c;当表单开始提交时设置为true&#xff08;禁用按钮&#xff09;&#xff0c;成功请求或者失败再设置为false 代码 wxml <form bindsubmit"formSubmit"><view cl…

一篇文章厘清C#中的lambda表达式

一篇文章厘清C#中的lambda表达式 链接: 源码 说C#的匿名函数,就要先说一下匿名函数. Lambda表达式 1 lambda表达式演变史1. **C# 1.0 (2002)**2. **C# 2.0 (2005)**3. **C# 3.0 (2007)**4. **C# 4.0及以后** 2 lambda表达式使用方法1 **基本语法**2 **使用场景和示例****作为…

设计模式之备忘录模式(下)

3&#xff09;实现多次撤销 1.结构图 对负责人类MementoCaretaker进行了修改&#xff0c;在其中定义了一个ArrayList类型的集合对象来存储多个备忘录。 2.代码实现 import java.util.*;public class MementoCaretaker {//定义一个集合来存储多个备忘录private ArrayList mem…

关于java数据样品以及转换

关于集合 List<String> List<String> list duoMapper.selectName(); [ "alice1", "alice2", "alice3", "alice4", "alice5", "alice6", "alice7", "alice8",…

Discourse API 调用数据返回的问题

在我们调用 Discourse API 创建一个主题的时候&#xff0c;我们会从 Discourse API 的调用文档中看到返回的 thumbnails 返回为 String。 但实际上 thumbnails 的返回在目前已经是一个对象了。 根据实际返回的结果&#xff0c;这个字段已经被设置成了一个 List。 真实的服务器…

【原创教程】EPLAN电气图纸设计规范

EPLAN电气图纸中的通用说明&#xff0c;说白了就是电气图纸的图纸概述、制图规范&#xff08;这里的规范根据每个公司及客户的要求不同进行更改&#xff09;。下面就以我们公司的规范要求&#xff0c;以实际的项目案例来对照讲述一下&#xff0c;通用说明的制作。 1.首先新建页…