切面实现spring事物管理

  1. 切面实现事务  
  2.     在实现事务的时候也是在xml中编写代码来实现,因为要用到切面,所以我们要引入aop schema,引入的方法实在beans标签上写为:  
  3. xmlns:aop=http://www.springframework.org/schema/aop  
  4. 和  
  5. http://www.springframework.org/schema/aop  
  6. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd  
  7.   
  8. 这样,aop就可以使用了  
  9. 事务的产生肯定是和增删改查有关系的,我们以在hibernate中的事务为例,配数据源和配hibernate的工厂和hibernate模板类在这里就不多说了,如果有需要,可以看上一篇 --- 征服hibernate。  
  10.   
  11. 1.首先我们要声明一个事务管理器,来把sessionFactory工厂注入到事务管管理器中,代码为:  
  12. <!-- 声明事务管理器 -->  
  13.     <bean id="hibernateTransactionManager"  
  14.     class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  15.         <!-- 绑定一个sessionFactory -->  
  16.         <property name="sessionFactory" ref="sessionFactory"></property>  
  17.     </bean>  
  18. 之后,事务的发生地点是在哪呢?什么时候使用事务呢?这时就用到了切面,用一个切面把所有用到的事务都包含进来。  
  19. 2.配置事务的通知  
  20.     <!-- 配置事务的通知 -->  
  21.     <tx:advice id="txadvice" transaction-manager="hibernateTransactionManager">  
  22.         <tx:attributes>  
  23.             <tx:method name="add*" isolation="DEFAULT" propagation="REQUIRED" />  
  24.             <tx:method name="insert*" isolation="DEFAULT" propagation="REQUIRED" />  
  25.             <tx:method name="find*" isolation="DEFAULT" propagation="REQUIRED" />  
  26.             <tx:method name="delete*" isolation="DEFAULT" propagation="REQUIRED" />  
  27.         </tx:attributes>  
  28.     </tx:advice>  
  29. 事务的通知配置完了,事务在以上的配置中的某个方法中执行,那么,通知的配置是要有切面的,是哪个切面执行的呢?  
  30. 3.配置一个切面  
  31. <!-- 配置一个切面 -->  
  32.     <aop:config>  
  33.         <!-- advisor是切入点和通知的组合体 -->  
  34.         <aop:pointcut expression="execution(* cn.csdn.hr.hibernate.service.*.*(..))"  
  35.             id="txPointCut" />  
  36.         <aop:advisor advice-ref="txadvice" pointcut-ref="txPointCut" />  
  37.     </aop:config>  
  38. 其中的切入点是通知实现的地方。  
  39.   
  40. 这样,我们的事务就配置好了  
  41. 4.举例在删的时候使用事务  
  42. public void delete(final Admin entity) {  
  43.         // 事务执行操作  
  44.         transactionTemplate.execute(new TransactionCallback() {  
  45.             @Override  
  46.             public Object doInTransaction(TransactionStatus stutus) {  
  47.                 // TODO Auto-generated method stub  
  48.                 try {  
  49.                     adminDao.delete(entity);  
  50.                     //不需要事务的提交  
  51.                 } catch (Exception ex) {  
  52.                     //只能回滚  
  53.                     stutus.setRollbackOnly();  
  54.                 }  
  55.                 return null;  
  56.             }  
  57.         });  
  58.     }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ljl18566743868

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值