Spring学习-31:Spring中的事务管理之手动编码的方式

Spring高频面试题 答案是一种设计原则,它将对象的创建、组装和管理控制权从应用程序代码内部转移到外部容器(如 Spring IoC 容器)。传统方式下,主动通过new创建依赖对象;而 IoC 下,被动接收外部注入的依赖,控制流发生了“反转”。是IoC 原则的一种具体实现方式。它描述的是:组件之间依赖关系的建立,不是在组件内部硬编码,而是通过构造器、Setter 方法或字段注入等方式,由外部容器将依赖对象“注入”到组件中。三种常见注入形式构造器注入(推荐,保证不可变、强制依赖)Setter 注入(可选依赖)字段注入。 阅读详情

手动编码的方式完成事务管理:需要事务管理器,它才是真正管理事务的对象。

Spring提供了事务管理的模板,也就是一个工具类,可以省写一些代码。

第一步,注册事务管理器、事务管理模板,并在业务层注入事务管理模板,基于applicationContext.xml的配置。

<!-- 业务层类 -->
<bean id="accountService" class="com.js.demo1.AccountServiceImpl">
	<!-- 在业务层注入Dao -->
	<property name="accountDao" ref="accountDao"></property>
	<!-- 在业务层注入事务管理模板 -->
	<property name="transactionTemplate" ref="transactionTemplate"></property>
</bean>
<!-- 持久层类 -->
<bean id="accountDao" class="com.js.demo1.AccountDaoImpl">
	<!-- 注入连接池对象,通过连接池对象去创建JDBC模板 -->
	<property name="dataSource" ref="dataSource"></property>
</bean>

<!-- 事务管理的模板 -->
<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
	<property name="transactionManager" ref="transactionManager"></property>
</bean> 
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<!-- 需要注入连接池,通过连接池获得连接 -->
	<property name="dataSource" ref="dataSource"></property>
</bean>
修改业务类,添加事务模板属性。

package com.js.demo1;

import org.springframework.transaction.support.TransactionTemplate;

public class AccountServiceImpl implements AccountService{
	private AccountDao accountDao;
	private TransactionTemplate transactionTemplate;
	public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
		this.transactionTemplate = transactionTemplate;
	}
	public void setAccountDao(AccountDao accountDao) {
		this.accountDao = accountDao;
	}
	/**
	 * 转账的方法
	 * @param from:从哪转出
	 * @param to:转入目标
	 * @param money:转账金额
	 */
	public void transfer(String from, String to, double money) {
		accountDao.out(from, money);
		accountDao.in(to, money);
	}
	
}

第二步:修改业务类,编写事务。

package com.js.demo1;

import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;

public class AccountServiceImpl implements AccountService{
	private AccountDao accountDao;
	private TransactionTemplate transactionTemplate;
	public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
		this.transactionTemplate = transactionTemplate;
	}
	public void setAccountDao(AccountDao accountDao) {
		this.accountDao = accountDao;
	}
	/**
	 * 转账的方法
	 * @param from:从哪转出
	 * @param to:转入目标
	 * @param money:转账金额
	 */
	public void transfer(final String from, final String to,final double money) {
		transactionTemplate.execute(new TransactionCallbackWithoutResult() {
			
			@Override
			protected void doInTransactionWithoutResult(TransactionStatus status) {
				accountDao.out(from, money);
				accountDao.in(to, money);
			}
		});
	}
	
}

第三步:进行测试。


转账成功。

第四步:测试有异常发生的情况下,事务的管理是否生效。

修改业务类:

public void transfer(final String from, final String to,final double money) {
		transactionTemplate.execute(new TransactionCallbackWithoutResult() {
			
			@Override
			protected void doInTransactionWithoutResult(TransactionStatus status) {
				accountDao.out(from, money);
				int d = 1/0;
				accountDao.in(to, money);
			}
		});
	}

第五步:运行测试。


金额没有发生变化,说明事务管理成功。

这就是使用手动编码的方式来实现事务的管理。

手动编码方式的缺点:代码量增加,代码有侵入性。业务层代码中嵌入了dao代码。

spring事务管理几种方式代码实例 spring事务管理几种方式代码实例:涉及编程式事务,声明式事务之拦截器代理方式、AOP切面通知方式、AspectJ注解方式,通过不同方式实例代码展现,总结spring事务管理的一般规律,从宏观上加深理解spring事务管理特性。 立即下载

相关推荐

spring+mybatis的编码式事务

spring+mybatis的编码式事务

Spring框架(JavaEE开发进阶Ⅲ)—Spring中的编码事务

一、主要内容 1、Spring中的编码事务   二、Spring中的编码事务 1、要在应用中更好控制事务边界,编码式事务是合适的选择 2、以myTwitter项目中信息服务类MessageService的saveMessage()作为事务方法的例子: public void saveMessage(Message message) { messageDao.saveMessage...

csj50的专栏 501

关于mos管的压降问题(项目遇到问题总结)

在研发过程中没有出现问题的板子,到了小批时竟出现雷达一直在触发???找了大几天,没有头绪。心中疑惑颇多,加上老板催促,自考等原因,真是压力山大。4月份自考,只有差不多一个月时间了吧,没有什么大的收获,反而在查找硬件问题的过程中,发现了一个自己忽视的一个问题,就是关于Mos管的压降问题。 备考的过程崎岖不平,工作又问题多多,孰轻孰重,如何取舍?从心理来说,不想取舍什么,只是有所得就可以,过不了就过不了呗,已经毕业十五年了,没这个本科文凭不也过来了吗?只是代表了自己在这一段时间的思考,自己兴趣吧,没什么大不了

guangod的博客 2万+

(七)Spring源码解析:Spring事务

当我们希望在Spring中开启事务的时候,我们需要在配置中增加,如下所示:file我们在Spring项目中搜索“”,可以发现与事务相关的处理类为,在该类中,注册了解析器,代码如下所示:file在类中我们需要关注的就是parse(...)方法,它负责执行BeanDefiniton的解析操作。这里会通过mode属性来确定是采用aspectj的方式进行解析还是采用AOP代理的方式进行解析,具体逻辑如下所示:file由于常用的就是采用AOP代理的方式进行解析操作,所以此处我们只需要关心类的。

爪哇缪斯的博客 513

csp-j/s

CSP-J/S 是中国计算机学会(CCF)主办的 ‌‌(Certified Software Professional Junior/Senior),是信息学奥赛(NOI)体系的入门级选拔考试,也是国内最具权威性的青少年编程能力认证之一。

gxyxxrYYDS的博客 2028

2025小红书跳转卡片实战指南:从零搭建独立后台与自动化发卡系统

本文提供了一份2025年小红书跳转卡片的实战搭建指南,详细解析了独立后台系统的核心架构与自动化发卡流程。文章从零开始,手把手教你使用Node.js、Vue.js等技术栈构建包含后台管理、用户制卡中心与前端交互的完整系统,旨在帮助运营者实现合规引流,并掌握数据自主权与自动化运营能力。

weixin_29234423的博客 518

Spring_第五章【Spring的事务代码实现】

目录 1:spring的7中事务传播行为 2:Spring对应数据库中的事务隔离级别 3:Spring事务接口简介 3.1:PlatformTransactionManager (平台事务管理器) 3.2:TransactionStatus 事务状态 3.3:TransactionDefinition 事务定义 4:Spring实现事...

huyiju的博客 3247

用SOLIDWORKS从零画一个履带机器人,手把手教你搞定底盘和传动

本文详细介绍了如何使用SOLIDWORKS从零开始设计履带式机器人,重点讲解底盘结构优化和传动系统设计的关键步骤。通过七个阶段的实战指南,包括前期规划、底盘建模、驱动系统装配、履带生成、动态模拟等,帮助工程师和爱好者掌握履带机器人的核心设计技巧,提升地形适应能力和动力效率。

weixin_30872499的博客 632

spring事务实现方式

声明式事务‌ 和 ‌编程式事务‌ 两个角度,结合代码示例和底层原理,解析 Spring 事务的实现方式。

xiaowangbadan0_0的博客 787

AI落地困局与破局者FDE:从技术神话到价值实干的战略转型

AI落地困局与破局者FDE:从技术神话到价值实干的战略转型 当前AI企业级应用面临三大核心挑战:业务场景深度非标化、技术落地"最后一公里"困局、以及市场竞争焦点转向实用价值。前线部署工程师(FDE)作为破局关键,通过技术-业务-产品三维交汇的复合能力,将AI从实验室推向生产环境。FDE不仅是技术架构师,更是业务价值挖掘机和产品进化传感器,通过"碎石路-高速公路"双循环模式,将定制化需求沉淀为可复用的平台能力。这种模式颠覆了传统SaaS的销售逻辑,形成基于价值的J型增长

随笔记录-分享&记忆 4003

TriCore架构-基于TC397在SOTA过程中AB-SWAP切换底层原理

TC397的SOTA升级机制通过硬件地址重映射实现,利用MMU将逻辑地址动态映射到不同物理地址。其PFlash支持标准/备用地址映射,通常使用PF0+PF1+PF4空间以便于OTA处理。升级时,新固件自动写入非活动分区(A/B分区切换),由地址转换函数完成逻辑地址到物理地址的转换。系统重启后根据寄存器选择启动区域,实现安全无缝的固件更新。

xiandang8023的博客 490

Spring事务管理实现方式之编程式事务与声明式事务详解

1.编程式事务:编码方式实现事务管理(代码演示为JDBC事务管理) Spring实现编程式事务,依赖于2大类,分别是上篇文章提到的PlatformTransactionManager,与模版类TransactionTemplate(推荐使用)。下面分别详细介绍Spring是如何通过该类实现事务管 2.声明式事务:可知编程式事务每次实现都要单独实现,但业务量大功能复杂时,使用编程式事务无疑是痛苦的,而声明式事务不同,声明式事务属于无侵入式,不会影响业务逻辑的实现。

半山闲人的专栏 5万+

基于jeecgboot3.9.0的项目管理——项目工作台(二)

基于jeecgboot3.9.0的项目管理——项目工作台(二)

宁波阿成的博客 206

Spring事务管理——回滚(rollback-for)控制

1.代码中事务控制的3种方式[1]编程式事务:就是直接在代码里手动开启事务,手动提交,手动回滚。优点就是可以灵活控制,缺点就是太麻烦了,太多重复的代码了。声明式事务:就是使用SpringAop配置事务,这种方式大大的简化了编码。需要注意的是切入点表达式一定要写正确。注解事务:直接在Service层的方法上面加上@Transactional注解,个人比较喜欢用这种方式。2.事务不回滚的原因    在...

ryelqy的博客 1万+

大规模新闻聚合爬虫实战:Python爬取数百万新闻数据的完整指南

本文详细介绍了如何构建一个大规模新闻聚合爬虫,结合Python异步爬虫技术,实现高效、稳定的新闻数据采集。增加NLP模块对新闻内容做自动分类、情感分析。引入机器学习模型检测新闻真实性。使用分布式爬虫框架进一步提升规模。增加多媒体内容抓取与处理。

2201_76125261的博客 1554

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java-137 深入浅出 MySQL Spring Boot 声明式事务与编程式事务的使用与对比

声明式事务和编程式事务。声明式事务依赖@Transactional注解,可作用于类或方法,适合统一管理事务,常用于服务层。类级别配置能为所有方法提供默认的传播行为和隔离级别,同时方法级注解可覆盖类配置。其优点是非侵入式、配置简洁,但调试复杂,对异常回滚有严格要求。编程式事务则要求开发者显式控制事务的开始、提交和回滚,通常通过TransactionTemplate实现。它的优势在于灵活、可精细化控制事务边界,适用于复杂业务逻辑,但需要额外的样板代码,易出错。两者对比来看,声明式事务更适合大多数常规业务,而编程

谢谢你的喜欢 我们一起无限进步 1181

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Spring中事务配置以及事务不起作用可能出现的问题

前言:在Spring中可以通过对方法进行事务的配置,而不是像原来通过手动写代码的方式实现事务的操作,这在很大程度上减少了开发的难度,本文介绍Spring事务配置的两种方式:基于配置文件的方式和基于注解的方式。并对配置过程中可能出现的问题作出总结。 一、基于配置文件的方式 1 <context:component-scan base-package="com.learni...

weixin_30748995的博客 206

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java-142 深入浅出 MySQL Spring事务失效的常见场景与解决方案详解(4)

事务管理依赖于 ThreadLocal 保存事务上下文,因此在单线程环境下工作良好,但在多线程场景中常常失效。由于子线程无法继承父线程的 ThreadLocal 变量,导致在事务方法中创建新线程时,子线程的数据库操作不会被纳入事务管理,从而出现事务失效问题。解决该问题的常见做法包括:避免在事务方法内部直接创建新线程,将并发逻辑移出事务边界;使用编程式事务管理(如 TransactionTemplate 或显式使用 DataSourceTransactionManager)确保每个线程独立管理事务;在复杂场景

谢谢你的喜欢 我们一起无限进步 995

SSH框架搭建之实现并配置ACTION(Spring与Struts2集成第一种方式)

官网参考地址:https://struts.apache.org/getting-started/how-to-create-a-struts2-web-application;-- 定义默认的action,在访问http://localhost:8081/时默认访问index,若不配置,则访问这个地址时会报错 -->-- 动态方法调用,为true时,就可以在struts.xml配置“*”的通配符,来调用action里的方法 -->(3)、过滤器配置。

weixin_46741943的博客 512

Spring学习笔记(一)——综述篇

Motivation 最近看到数年前的电视剧《汉武大帝》中的一个片段:汉武帝偶得一柄匈奴宝刀,当即让身边的将军拔出自己的佩剑来比试一番,看哪一个更锋利。谁知汉武帝只是用力一劈,将军的汉剑便断作两截。汉武帝很是惊愕,询问献刀之人方知,匈奴人从西域学得了比汉朝更先进的冶钢技术。因此…… 历史上,无论是农业上还是军事装备上的技术革新,总能带来一个国家实力的提升,新的工具逐渐提高着人的生产力。 回到...

石沉溪洞 1786

JavaEE开发者必学:Spring框架核心原理与实战应用

控制反转(IoC)和依赖注入(DI)是现代Java开发的核心设计模式,通过解耦组件依赖关系显著提升代码可维护性。Spring框架作为JavaEE轻量化解决方案,其模块化架构覆盖从核心容器到Web MVC的全栈需求,特别在企业级应用开发中展现出比传统EJB更优的性能表现。Spring Boot通过自动配置和起步依赖进一步降低使用门槛,使开发者能快速构建微服务架构。掌握Spring技术栈对于处理高并发场景、实现分布式事务等企业级需求至关重要,典型应用包括电商系统、金融交易平台等需要高可靠性的领域。

weixin_34116482的博客 315

Java常见面试题

SpringMVC的方法之间基本上独立的,独享request response数据,而Struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码 读程序时带来麻烦,每次来了请求就创建一个Action,一个Action对象对应一个request上下文。当多个线程访问某个方法时,不管你通过怎样的调用方式或者说这些线程如何交替的执行,我们在主程序中不需要去做任何的同步,这个类的结果行为都是我们设想的正确行为,那么我们就可以说这个类时线程安全的。

youmashengyue的博客 343

学习SSM框架的详解和学习路线大总结

那么什么是SSM框架呢? SSM框架是Spring Framework + Spring MVC + MyBatis Spring FrameWork 是Spring公司开发的用于企业级应用的框架,是SSM框架的核心 Spring MVC是Spring Framework的一个实际应用的模块,主要是使用了MVC三层架构(Model模型,View视图,Controller控制器) MyBatis是一个操作数据库的持久层框架

weixin_66328465的博客 861

Spring Boot健身房管理系统:从零构建Java Web项目实战

在Java Web开发领域,Spring Boot作为主流的微服务框架,通过自动配置和约定大于配置的理念,极大地简化了企业级应用的搭建过程。其核心原理在于内嵌Web服务器和Starter依赖管理,能够快速整合MyBatis等持久层框架,实现高效的数据访问。这种技术组合在构建业务管理系统时展现出巨大价值,能够支撑会员管理、课程预约、消费记录等典型业务场景的数据流转与处理。本文以健身房管理系统为具体实践案例,详细剖析如何使用Spring Boot、MyBatis-Plus、MySQL和Thymeleaf等技术栈

weixin_30588675的博客 291
上一篇: Spring学习-30:Spring中的事务管理之环境搭建
下一篇: Spring学习-32:Spring中的事务管理之声明式事务(原始方式,基于TransactionProxyBean)
Yes_JiangShuai
博客等级 码龄10年 149粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值