基于AOP的声明式事物控制

目录

Spring事务编程概述

基于xml声明式事务控制

事务属性

isolation

timeout

read-only

propagation

全注解开发


Spring事务编程概述

事务是开发中必不可少的东西,使用JDBC开发时,我们使用connection对事务进行控制,使用MyBatis时,我们使用SqlSession对事务进行控制,缺点显而易见,当我们切换数据库访问技术时,事务控制的方式总会变化

 

 

基于xml声明式事务控制

结合上面学习的AOP技术,我们可以对Service的方法进行事务的增强

  • 目标类:自定义的AccountServiceImpl,内部方法是切点

  • 通知类:Spring提供的,通知方法已经定义好的,只需配置

 步骤:

        1.导入Spring事务的相关的坐标

         2.配置目标类AccountServiceImpl

         3.使用advisor标签配置切面

 (为什么用advisor标签配置切面?)

假设使用aspect的话需要一个通知类,一级配置一系列通知方法标签

而advisor只需要实现接口重写方法就可以,配置简单

<!--    包扫描  --><context:component-scan base-package="com.xfy"></context:component-scan>
<!--   JDBC.properties --><context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder><!--    整合Mybatis-->
<!--    SqlSessionFactory --><bean class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"></property></bean>
<!--    mapper --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.xfy.mapper"></property></bean>
<!--   dataSource  --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean>
<!--    配置平台事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean>
<!--    Spring提供好的事务增强(通知)--><tx:advice id="myadvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="*"/></tx:attributes></tx:advice>
<!--  事务增强的aop   --><aop:config>
<!--        切点  --><aop:pointcut id="transforMoney" expression="execution(void com.xfy.service.impl.AcountServiceImpl.transforMoney(..))"/><aop:advisor advice-ref="myadvice" pointcut-ref="transforMoney"></aop:advisor></aop:config>

其中有注释可以了解一下 

<!--    Spring提供好的事务增强(通知)--><tx:advice id="myadvice" transaction-manager="transactionManager"><tx:attributes>
<!--            配置事务属性  -->
<!--            name:方法名  * 通配符  ( 添加操作 addXXX  addYYY  addZZZ => add* )-->
<!--            下面·这个意味着对transforMoney方法配置独属于她的事务属性-->
<!--            从上往下匹配  匹配到就不往下 --><tx:method name="transforMoney" isolation="READ_COMMITTED" timeout="3" read-only="false" propagation="REQUIRED"/><tx:method name="*"/></tx:attributes></tx:advice>
事务属性

这个补充一下事务属性👍👍👍👍😏

isolation

timeout

超时时间,默认为-1(没有超时时间) 单位:秒(s)😊

read-only

是否只读,查询操作才只读,其他默认

propagation

事务传播行为,解决业务方法调用业务方法(事务嵌套问题)

全注解开发

@Configuration
@ComponentScan(basePackages = {"com.xfy"})
@MapperScan(basePackages = {"com.xfy.mapper"})
@PropertySource("classpath:jdbc.properties")
@EnableTransactionManagement//事务自动管理
public class SpringConfig {@Beanpublic DataSource dataSource(@Value("${jdbc.driver}") String driver,@Value("${jdbc.url}") String url,@Value("${jdbc.username}") String username,@Value("${jdbc.password}") String  password){DruidDataSource dataSource=new DruidDataSource();dataSource.setDriverClassName(driver);dataSource.setUrl(url);dataSource.setUsername(username);dataSource.setPassword(password);return  dataSource;}@Beanpublic SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);return  sqlSessionFactoryBean;}@Beanpublic DataSourceTransactionManager  transactionManager(DataSource dataSource){DataSourceTransactionManager dataSourceTransactionManager=new DataSourceTransactionManager();dataSourceTransactionManager.setDataSource(dataSource);return  dataSourceTransactionManager;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

接口测试【加密解密攻防完整版】实战教程详解

一、对称加密 对称加密算法是共享密钥加密算法&#xff0c;在加密解密过程中&#xff0c;使用的密钥只有一个。发送和接收双方事先都知道加密的密钥&#xff0c;均使用这个密钥对数据进行加密和解密。 数据加密&#xff1a;在对称加密算法中&#xff0c;数据发送方将明文 (原…

html5各行各业官网模板源码下载(1)

文章目录 1.来源2.源码模板2.1 HTML5白色简洁设计师网站模板 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/134682321 html5各行各业官网模板源码下载&#xff0c;这个主题覆盖各行业的html官网模板&#xff0c;效果模…

C++学习寄录(八.继承)

继承的语法&#xff1a;class 子类 : 继承方式 父类 class A : public B; A 类称为子类 或 派生类 B 类称为父类 或 基类 1.基本使用 未使用继承的代码比较冗余重复 #include <iostream> #include <fstream> #include <string> #include <chrono>…

【计算机网络】虚拟路由冗余(VRRP)协议原理与配置

目录 1、VRRP虚拟路由器冗余协议 1.1、协议作用 1.2、名词解释 1.3、简介 1.4、工作原理 1.5、应用实例 2、 VRRP配置 2.1、配置命令 1、VRRP虚拟路由器冗余协议 1.1、协议作用 虚拟路由冗余协议(Virtual Router Redundancy Protocol&#xff0c;简称VRRP)是由IETF…

ArkTS-DevEco Studio打开预览器报错

下载官网Codelab案例&#xff0c;打开预览器报错 Failed to start the service process. Make sure the path specified by nodejs.dir in the local.properties file is correct. 解决方案 在编辑器设置中找到node安装路径 将" local.properties"文件中的"nod…

python监测GPU使用

参考&#xff1a; https://stackoverflow.com/questions/67707828/how-to-get-every-seconds-gpu-usage-in-python 自己测试 import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim import numpy as np import matplotlib.pyplot…

如何设置Linux终端提示信息

如何设置Linux终端提示信息 1 方法一&#xff1a;只能在VSCode或者Pycharm终端显示提示信息2 方法二&#xff1a;只能在MobaXterm等远程软件上显示提示3 方法三&#xff1a;避免用户没看到上面的提示&#xff0c;上面两种都设置一下 在使用远程终端时&#xff0c;由于多用户使用…

抖音、视频号流行的 Bokeh(虚化) 效果是怎么实现的?

未经作者(微信ID:Byte-Flow)允许,禁止转载 文章首发于公众号:字节流动 什么是 bokeh 效果? Bokeh 效果是指照片中背景模糊而主体清晰的一种摄影效果。这种效果是通过使用大光圈的镜头来实现的,使得光圈外的景物失去焦点,呈现出一种柔和、虚化的效果。 Bokeh 效果的质量…

java后端自学总结

自学总结 MessageSource国际化接口总结 MessageSource国际化接口 今天第一次使用MessageSource接口,比较意外遇到了一些坑 messageSource是spring中的转换消息接口&#xff0c;提供了国际化信息的能力。MessageSource用于解析 消息&#xff0c;并支持消息的参数化和国际化。 S…

使用Ray创建高效的深度学习数据管道

大家好&#xff0c;用于训练深度学习模型的GPU功能强大但价格昂贵。为了有效利用GPU&#xff0c;开发者需要一个高效的数据管道&#xff0c;以便在GPU准备好计算下一个训练步骤时尽快将数据传输到GPU&#xff0c;使用Ray可以大大提高数据管道的效率。 1.训练数据管道的结构 首…

【leetcode】64. 最小路径和

题目 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&#xff1a; 输入&#xff1a;grid [[1,3,1],[1,5,1],[4,2,1]] 输出&…

【vue】ant-design-vue的树结构实现节点增删改查

根据业务需要&#xff0c;实现树结构的节点新增编辑删除功能&#xff0c;主要逻辑是利用树节点的scopedSlots属性对其进行自定义改造&#xff0c;监听悬停事件在节点右侧出现增删改对应图标&#xff0c;点击图标出现弹窗表单对内容进行修改&#xff0c;具体代码如下&#xff1a…