【SpingIOC】管理事物的实现详解_spring通过ioc管理事务_sihai_1991的博客-程序员秘密

技术标签: Spring  

总结一下SpringIOC容器从开启事物到管理事物的开发步骤以及一些具体的实现步骤:

工程结构目录如下图,这里不一一详细说明其他各类之间的关系:



基于注解的方式声明事物和IOC容器管理事物:

<!-- 配置事物管理器 -->
	<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"/>
	</bean>
	<!-- 指定基于注解的方式 配置-->
	<tx:annotation-driven transaction-manager="txManager" />

一,beans.xml配置如下:

<!-- 自动扫描与装配bean -->
	<context:component-scan base-package="cn.lsh.spring"/>
	
	<!-- 导入外部的配置文件 -->
	<context:property-placeholder location="classpath:jdbc.properties"/>
	
	<!--  配置连接池-->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${driver}"></property>
		<property name="JdbcUrl" value="${url}"></property>
		<property name="user" value="${username}"></property>
		<property name="password" value="${password}"></property>
		
		<property name="minPoolSize" value="3"></property>
		<property name="maxPoolSize" value="10"></property>
	</bean>
	
	<bean id="jt" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource"/>
	</bean>
	<!-- 配置事物管理器 -->
	<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"/>
	</bean>
	<!-- 指定基于注解的方式 配置-->
	<tx:annotation-driven transaction-manager="txManager" />
</beans>

二,新建UserService接口只实现了一个save()方法

public interface UserService {
	
	void save();
}

三,新建UserServiceImpl实现UserService接口:

//声明名称为userService的bean对象(如果没有指定,则默认为类的名称)
@Service("userService")
public class UserServiceImpl implements UserService {
	
	@Resource//注入到容器中
	private UserDao userDao;
	
	@Transactional//声明此方法开启事物(置于类上,则说明该类所有的方法开启事物)
	public void save() {
		userDao.addUser(new User());
		int i=1/0; //报异常回滚
		userDao.addUser(new User());
	}
}
四,新建测试类:

public class TestDemo3 {
	ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
	//获取名称为userService的bean对象
	UserService service = (UserService)ac.getBean("userService");
	
	@Test
	public void test1(){
		service.save();	
	}
}
以上代码为SpringIOC容器管理事物具体实现步骤(基于注解的方式),与JDBC和Hibernate相比较,IOC容器管理事物要简单易学!




版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010143291/article/details/52180175

智能推荐

iOS10-iOS13全系统越狱来了,A5-A11芯片全部能越狱工具来了_宅哥技术的博客-程序员秘密

编辑|排版|@宅哥技术转载请联系商务合作给你开白名单来源:宅哥技术(zg_jishu)------------------ 全系统越狱来了在之前很久咱们就知道有一个...

hdu 4148 Length of S(n) --字符串找规律_nothing is worse的博客-程序员秘密

题目:S(1)=1,S(2)=11,S(3)=21,S(4)=1211,S(5)=111221,S(6)=312211,....求S(n)的长度。思路:题目很简单就是压缩字符串, 比如:s[4] = 1211  那么是s[5]中内容就是1一个1即11, 一个2即12和2个1即21, 合起来s[5]就是11 12 21 同理s[5] = 111221 那么

idl结果显示窗口如何缩小_科学网-IDL 创建窗口-钱磊的博文_code4f的博客-程序员秘密

一直以来我都觉得写程序创建一个窗口,添加些按钮,显示些会变化的文字是十分神奇的事。但是又懒又笨,一直没学会。最近开始考虑做一个观测模拟系统,模拟一个射电天文望远镜的控制界面。这种东西每个望远镜都由,估计代码也可以搞到,但是总觉得自己写的用起来才比较舒服。于是终于下定决心自己写几个窗口。C语言写窗口估计是比较通用,但对于我来说可能太困难了,我估计连如何编译都学不会。于是最终决定用IDL。上网搜了一下...

Java中栈内存、堆内存、方法区——浅析_dongcheng1240的博客-程序员秘密

引用自蛊惑Into博客园:Java把内存分成两种,一种叫做栈内存,一种叫做堆内存在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。堆内存用于存放由new创建的对象和数组。在堆中分配的内存...

如何设置Macbook pro的Touch bar_qq_38482525的博客-程序员秘密

Macbook pro笔记本中有一个Touch bar,如果有一些不常用的工具,该怎么添加或删减Touch bar中的工具呢?本文为大家带来详细的图文教程,欢迎观看1、打开“系统偏好设置...”。2、打开系统偏好设置,找到“键盘”。3、打开键盘,找到“自定触控栏...”。4、打开“自定触控栏...”,可以看到所有的工具。5、工具拖到Touch bar上,即可增加...

Java实现鉴权失败达到一定次数锁定IP并释放到期IP_daizuojian的博客-程序员秘密

背景在Web系统或一些Client端登录时,如果用户输错用户名或密码达到一定次数,一般会锁定账号或IP,本文只对IP锁定一段时间,不依赖于Redis这类中间件,使用纯Java实现锁定IP的功能,直接上代码。代码篇LockBean用于封装锁定IP信息,特意添加了isLockLogged,防止日志打印频繁public class LockBean { //锁定时间 private LocalDateTime lockDateTime; //失败次数 private At

随便推点

QT——QTabWidget与QPushButton合用关闭时报错问题_夕檀的博客-程序员秘密

做了一个界面,里面有一个tabWidge,包含两个子页面,还有另一个按钮,切换TabWidget页面时,按钮上的文字随着页面改变。 可是关闭软件时发现程序会异常退出,没找到原因,后来领导给我讲了,虽然这种问题不常出现,但还是写篇文章记录一下。...

iOS 数据持久化方案-Realm的使用_程序员大咖的博客-程序员秘密

Linux编程点击右侧关注,免费入门到精通!作者丨IIronManhttps://www.jianshu.com/p/118c1fe1b82f总体内容1、Realm介绍2...

Spring使用拦截器支持国际化(转)_贪杯的灵魂的博客-程序员秘密

Spring使用拦截器支持国际化(转) (2012-04-23 13:51:34)转载▼标签: it分类: SSHSpring使用拦截器支持国际化很方便,使用时只需要两个步骤: 一.spring配置 具体配置方式如下:        rce">            

C语言-将输入的一个自然数拆分成每个数位上的数字,并用升序输出_输入一个数将各位数拆解成新的数_含光TAH的博客-程序员秘密

Input54142Output5 4 4 2 1#include &lt;stdio.h&gt;int main(){ int number; scanf("%d",&amp;number); //将各个数位上的数字存入数组 int cnt=0,N=1000000;//不知道几位数假设很大吧 int num[N]; while (number!=0) { num[cnt++] = number%10;//取余数

windows flask mysql_基于windows环境的Flask网站搭建(mysql + conda + redis)_weixin_39969448的博客-程序员秘密

1下载mysql-installer-community-5.7.24.0.msi(https://dev.mysql.com/downloads/windows/installer/8.0.html, 选择Looking for previous GA versions?)2.安装2.1选择模块2.2安装方式2.3设置密码2.4查看环境变量3.配置数据库3.1配置服务器编码在my.ini文件...

推荐文章

热门文章

相关标签