实现spring的事物管理

事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败。事务具有4个特性:Atomicity(原子性),Consistency(一致性),Isolation(隔离性),Durability(持久性)

要实现spring的事物管理,需要明白几点:

1、java的反射(主要用jdk 的动态代理实现DAO操作的增加即AOP);

2、无锁线程安全(参考spring的源码 使用ThreadLocal 实现无锁的资源共享)

下面看下代码:工程目录:


实现spring的事物管理_第1张图片

1、ConnectionHolder.java 主要持有connection对象;


实现spring的事物管理_第2张图片

2、SingleThreadConnetion.java:


实现spring的事物管理_第3张图片

3、下面实现如何根据注解来判断是否开启事物;

先定义一个注解:


实现spring的事物管理_第4张图片

代码中可以通过method.isAnnotationPresent(MyTransaction.class)来判断是否开启事物;后面Test的时候有代码:

如果有该注解那么:

定义一个事务管理器:


实现spring的事物管理_第5张图片

把事物单独提取出来然后使用aop 增加到需要使用事物的地方;

实现spring的事物管理_第6张图片

JDK的动态代理需要主要是实习InvocationHandler 接口 实现其中的invoke 方法,该方法第一个参数使我们需要增强的接口对象;实际上这个handler相当于一个代理

实现spring的事物管理_第7张图片

jdk 的动态是基于接口的代理,所以先要定义一个接口:

实现spring的事物管理_第8张图片
实现spring的事物管理_第9张图片

最后是测试啦:


实现spring的事物管理_第10张图片
实现spring的事物管理_第11张图片

你可能感兴趣的:(实现spring的事物管理)