事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败。事务具有4个特性:Atomicity(原子性),Consistency(一致性),Isolation(隔离性),Durability(持久性)
要实现spring的事物管理,需要明白几点:
1、java的反射(主要用jdk 的动态代理实现DAO操作的增加即AOP);
2、无锁线程安全(参考spring的源码 使用ThreadLocal 实现无锁的资源共享)
下面看下代码:工程目录:
1、ConnectionHolder.java 主要持有connection对象;
2、SingleThreadConnetion.java:
3、下面实现如何根据注解来判断是否开启事物;
先定义一个注解:
代码中可以通过method.isAnnotationPresent(MyTransaction.class)来判断是否开启事物;后面Test的时候有代码:
如果有该注解那么:
定义一个事务管理器:
把事物单独提取出来然后使用aop 增加到需要使用事物的地方;
JDK的动态代理需要主要是实习InvocationHandler 接口 实现其中的invoke 方法,该方法第一个参数使我们需要增强的接口对象;实际上这个handler相当于一个代理
jdk 的动态是基于接口的代理,所以先要定义一个接口:
最后是测试啦: