首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

spring3.0事务管理配备

2012-09-28 
spring3.0事务管理配置第一种配置方法:基于XML的事务管理这种方法不需要对原有的业务做任何修改,通过在XML

spring3.0事务管理配置

第一种配置方法:基于XML的事务管理

这种方法不需要对原有的业务做任何修改,通过在XML文件中定义需要拦截方法的匹配即可完成配置,要求是,业务处理中的方法的命名要有规律,比如setXxx,xxxUpdate等等。详细配置如下:

Xml代码??spring3.0事务管理配备
  1. <!--?定义事务处理类,不同的数据访问方式,事务处理类不同??
  2. ????比如:Hibernate操作的HibernateTransactionManager,JDBC操作的使用DataSourceTransactionManager??
  3. ?-->??
  4. <bean?id="transactionManager"?class="org.springframework.jdbc.datasource.DataSourceTransactionManager">??
  5. ????<property?name="dataSource"?ref="dataSource"></property>??
  6. </bean>??
  7. ??
  8. <!--?定义事务通知?-->??
  9. <tx:advice?id="txAdvice"?transaction-manager="transactionManager">??
  10. ????<!--?定义方法的过滤规则?-->??
  11. ????<tx:attributes>??
  12. ????????<!--?所有方法都使用事务?-->??
  13. ????????<tx:method?name="*"?propagation="REQUIRED"/>??
  14. ????????<!--?定义所有get开头的方法都是只读的?-->??
  15. ????????<tx:method?name="get*"?read-only="true"/>??
  16. ????</tx:attributes>??
  17. </tx:advice>??
  18. ??
  19. <!--?定义AOP配置?-->??
  20. <aop:config>??
  21. ????<!--?定义一个切入点?-->??
  22. ????<aop:pointcut?expression="execution?(*?com.iflysse.school.services.impl.*.*(..))"?id="services"/>??
  23. ????<!--?对切入点和事务的通知,进行适配?-->??
  24. ????<aop:advisor?advice-ref="txAdvice"?pointcut-ref="services"/>??
  25. </aop:config>??

第二中配置方法:基于@Transactional的事务管理

这种方法,只需要在Spring配置文件中定义一个事务管理对象(如DataSourceTransactionManager),然后加入<tx:annotation-driven/>节点,引用该事务管理对象,然后即可在需要进行事务处理的方法使用@Transactional进行标注。示例如下:

Spring配置XML文件

Xml代码??spring3.0事务管理配备
  1. <!--?定义事务处理类,不同的数据访问方式,事务处理类不同??
  2. ????比如:Hibernate操作的HibernateTransactionManager,JDBC操作的使用DataSourceTransactionManager??
  3. ?-->??
  4. <bean?id="transactionManager"?class="org.springframework.jdbc.datasource.DataSourceTransactionManager">??
  5. ????<property?name="dataSource"?ref="dataSource"></property>??
  6. </bean>??
  7. <!--?声明使用注解式事务?-->??
  8. <tx:annotation-driven?transaction-manager="transactionManager"/>??

Java代码中@Transactional示例

Java代码??spring3.0事务管理配备
  1. /**?
  2. ?*?@author?ZYWANG?2011-3-24?
  3. ?*/??
  4. @Service??
  5. @Transactional(propagation?=?Propagation.REQUIRED)??
  6. public?class?TeacherServicesImpl?implements?TeacherServices?{??
  7. ????@Autowired??
  8. ????TeacherDao?dao?=?null;??
  9. ??
  10. ????public?TeacherDao?getDao()?{??
  11. ????????return?dao;??
  12. ????}??
  13. ??
  14. ????public?void?setDao(TeacherDao?dao)?{??
  15. ????????this.dao?=?dao;??
  16. ????}??
  17. ??
  18. ????@Override??
  19. ????@Transactional(readOnly=true,propagation=Propagation.NEVER)??
  20. ????public?List<Teacher>?getAllTeachers()?{??
  21. ????????return?getDao().getAllTeachers();??
  22. ????}??
  23. ??
  24. ????@Override??
  25. ????public?void?addTeacher(Teacher?teacher)?{??
  26. ????????if(teacher.getId()?>?0){??
  27. ????????????getDao().updateTeacher(teacher);??
  28. ????????}else{??
  29. ????????????getDao().addTeacher(teacher);??
  30. ????????}??
  31. ????}??
  32. }??

?

?个人认为第一中方式的配置的侵入性低多了,写程序时只需要关注业务和命名规范,不需要考虑事务处理;第二种方式的配置可以更加灵活的使用事务,个性化定制。

以上配置基于Spring 3.0.5 进行设置,参考其《Reference Documentation》

热点排行