Spring的事务管理实现原理初探

这里主要是通过分析部分源码进行剖析Spring事务管理的实现原理。

再分析源码前,现从理论上大概分析哈:

纯JDBC操作数据库的基本步骤:

1. 获取连接 Connection conn = DriverManager.getConnection()

2. 开启事务conn.setAutoCommit(true/false);

3. 执行CRUD

4. 提交事务/回滚事务 conn.commit()  /  conn.rollback();

5. 关闭连接 conn.close();

使用Spring的事务管理功能后,我们可以不再写步骤 2 和 3 的代码,而是由Spirng 自动完成。

那么Spring是如何在我们书写的 CRUD 之前和之后开启事务和关闭事务的呢?解决这个问题,也就可以从整体上理解Spring的事务管理实现原理了。

学过Java代理的就可能立马知道是怎么回事了,所以这里就不再赘述Java代理知识了。

这里具体集合Spring进行分析哈:

1. 在applicationContext.xml文件中开启Spring的事务功能:

 

<tx:annotation-driven transaction-manager="myTxManager" />

再配置文件中,配置上面的信息,进可以开启Spring的事务管理功能。当然这事基于注解事务的。开启这个,代码中的Transactional注解才会起作用。

 

配置上面的信息后,Spring在初始化包含Transactional注解的类时,会自动生成这些类的代理,并放置再容器中,以便备用。如:

总结:Spring的事务管理的内部实现是利用了代理技术。(这句话不知道是不是多余, -_-   欢迎吐嘈,拍砖哈)

 

@Transactional
@Service
public class ProductTypeServiceImpl extends AbstractDao implements ProductTypeService {

	public ProductTypeServiceImpl () {
		System.out.println("***************************************************");
		System.out.println("class ProductTypeServiceImpl initialized");
		System.out.println("***************************************************");
	}
}

 

 

Spring生成的代理类,如图:

 

 

开启事务:

 

 

提交事务:

 

 

在applicationContext.xml文件中,没有配置 <tx:annotation-driven>标签时,截图如下:

如果有不对不足或需要帮助的地方,欢迎添加个人微信:WilsonPeng3

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值