Java事务处理全解析(七)—— 像Spring一样使用Transactional注解(Annotation)
来源:互联网 发布:敦煌博物馆 淘宝 编辑:程序博客网 时间:2024/06/09 21:22
在本系列的上一篇文章中,我们讲到了使用动态代理的方式完成事务处理,这种方式将service层的所有public方法都加入到事务中,这显然不是我们需要的,需要代理的只是那些需要操作数据库的方法。在本篇中,我们将讲到如何使用Java注解(Annotation)来标记需要事务处理的方法。
这是一个关于Java事务处理的系列文章,请通过以下方式下载github源代码:
Git clone https://github.com/davenkin/java_transaction_workshop.git
首先定义Transactional注解:
使用注解标记事务的基本原理为:依然使用上一篇中讲到的动态代理的方式,只是在InvocationHandler的invoke方法中,首先判断被代理的方法是否标记有Transactional注解,如果没有则直接调用method.invoke(proxied, objects),否则,先准备事务,在调用method.invoke(proxied, objects),然后根据该方法是否执行成功调用commit或rollback。定义TransactionEnabledAnnotationProxyManager如下:
可以看到,在AnnotationTransactionInvocationHandler的invoke方法中,我们首先获得原service的transfer方法,然后根据originalMethod.isAnnotationPresent(Transactional.class)判断该方法是否标记有Transactional注解,如果没有,则任何额外功能都不加,直接调用原来service的transfer方法;否则,将其加入到事务处理中。
在service层中,我们只需将需要加入事务处理的方法用Transactional注解标记就行了:
然后执行测试:测试运行成功,如果将AnnotationBankService中transfer方法的Transactional注解删除,那么以上测试将抛出RuntimeException异常,该异常为transfer方法中我们人为抛出的,也即由于此时没有事务来捕捉异常,程序便直接抛出该异常而终止运行。在下一篇(本系列最后一篇)文章中,我们将讲到分布式事务的一个入门例子。
0 0
- Java事务处理全解析(七)—— 像Spring一样使用Transactional注解(Annotation)
- Java事务处理全解析(七)—— 像Spring一样使用Transactional注解(Annotation)
- Java事务处理全解析(七)—— 像Spring一样使用Transactional注解(Annotation)
- Java事务处理全解析(七)—— 像Spring一样使用Transactional注解(Annotation)
- Java事务处理全解析(七)—— 像Spring一样使用Transactional注解(Annotation)
- java事务全解析(七)--像Spring一样使用Transactional注解(Annotation)
- java事务学习笔记(七)--像Spring一样使用Transactional注解(Annotation)
- Java事务之七——使用Transactional注解
- Spring中注解: @Transactional 事务处理
- Spring中注解: @Transactional 事务处理
- Spring声明式事务——全注解方式(@Transactional)
- Java事务(7)——使用Transactional注解
- spring@Transactional注解解决事务处理问题
- spring@Transactional注解解决事务处理问题
- spring@Transactional注解解决事务处理问题
- spring@Transactional注解解决事务处理问题
- Java 注解Annotation使用解析
- Java事务处理全解析(五)—— Template模式
- AbaBoost训练 d_createsamples.dat
- Socket、Tcp、Udp、Http 的认识及区别
- 集合框架-ArrayList集合存储自定义对象的排序案例
- 百度地图画多边形代码
- JAVA_HOME环境变量失效的解决办法
- Java事务处理全解析(七)—— 像Spring一样使用Transactional注解(Annotation)
- EditText点击获取焦点
- git 一些比较常用的命令
- Android studio中关于真机调试data目录不能访问的解决方法
- PL/SQL批处理语句:BULK COLLECT 和 FORALL对优化的贡献
- 统计鼠标点击次数的页面demo
- 获取所有下级的id
- bzoj1491: [NOI2007]社交网络
- 机器学习 逻辑回归