前言:spring框架对于事务管理提供了两种方案。一,编程式事务、二,声明式事务。本例主要剖析 声明式事务。

何为声明式事务:

  通过spring的配置文件配置事务规则,或使用spring @Transactional注解两种方式通知我们系统中哪些方法需要引入事务支持。

使用配置文件配置事务

 1 <!-- 使用spring声明式事务 -->
2 <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
3 <property name="sessionFactory" ref="mySessionFactory"></property>
4 </bean>
5
6 <tx:advice id="txAdvice" transaction-manager="transactionManager">
7 <tx:attributes>
8 <tx:method name="add*" propagation="REQUIRED" />
9 <tx:method name="del*" propagation="REQUIRED" />
10 <tx:method name="mod*" propagation="REQUIRED" />
11 <tx:method name="*" propagation="REQUIRED" read-only="true" />
12 </tx:attributes>
13 </tx:advice>
14
15 <aop:config>
16 <aop:pointcut id="interceptorPointCuts"
17 expression="execution(*
18 news.dao.*.*(..))" />
19 <aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" />
20 </aop:config>

 解析:① 由于本例是给数据访问层的方法添加事务管理,因此我们需要配置一个org.springframework.orm.hibernate5.HibernateTransactionManager ,这个类的一个bean。

② tx:advice节点则是配置我们需要引入事务管理类的方法名,这里spring允许我们使用通配符(*)。

③ aop:config这个节点则是配置我们的工程中有哪些类以及哪些方法需要引入事务管理,同理依旧可以使用通配符。本例news.dao.*.*(..))这句的意义为:我们工程中news包下面的dao包下面的所有类以及所有方法都需要引入事务管理。

使用spring注解实现事务管理

1    @Override
2 @Transactional(readOnly=true)
3 public List showAllNews() {
4 List<News> allNewList = nd.showAllNews();
5 //在return 之间,可以进行各种业务逻辑操作,本例省略
6
7 return allNewList;
8 }

解析:以上代码段是截取自业务层某一个方法的片段,在这里我们只需要加入@Transactional这一个spring的注解就是这么简单就可以实现事务管理了,同时我们配置文件中也无需配置tx:advice和aop:config这两个比较麻烦的节点了。

总结:两种方式都可以实现事务管理,使用注解一步到位,为什么我们还要学一个这么复杂的xml文件配置来实现事务管理呢。博主在当时学习的时候同样有这样的疑问。在这里我简单解析一下这两者如何取舍。一,xml文件配置可以实现使我们的代码简化,并一定程度上与代码解耦,一旦我们的工程需要替换框架,只需改动配置,而无需改动源码。二,使用注解可以非常直观的理解我们的源码,提高了可读性,不过只建议在一个相对较小,框架固定的工程中使用。具体该使用哪种方式还得依据具体情况分析。

最新文章

  1. 什么是jquery $ jQuery对象和DOM对象 和一些选择器
  2. VS调试技巧,提高调试效率(转):
  3. rotate the clock
  4. WinStore控件之TextBox
  5. Could not create the view: An unexpected exception was thrown. 电脑突然断电,myeclipse非正常关闭,出现错误
  6. CentoS 下报的 Requires: perl(:MODULE_COMPAT_5.8.8)
  7. Python-S13作业-day4-之登陆,管理后台
  8. SaveXml的方法汇总
  9. Team Formation
  10. JDK里面常用的包
  11. 异构平台同步(Mysql到Oracle)
  12. uploadify scriptData参数无法传参的问题
  13. 常用经典SQL语句大全(技巧)
  14. jquery扩展方法案例
  15. yii2.0面包屑的使用及启用中文
  16. MySQL实例
  17. java6 - 面向对象编程思想
  18. Django 系列博客(十三)
  19. C&amp;C++类型定义typedef
  20. C# VS2017的.net Core1.0项目在版本升级为2.0后找不到程序集的处理办法

热门文章

  1. ASP.NET 设计模式:设计模式和原则简述
  2. zz:linux下rz,sz的安装方法
  3. Java多线程与并发编程学习
  4. python中List添加、删除元素的几种方法
  5. 最长递减子序列(nlogn)(个人模版)
  6. HDU 1024 Max Sum Plus Plus【动态规划求最大M子段和详解 】
  7. 《TensorFlow深度学习应用实践》
  8. 多文件中的static
  9. [国嵌笔记][012][GCC程序编译]
  10. [国嵌笔记][021-022][ARM处理器工作模式]