Spring 声明式事务 一步登天

利用Spring aop的自动代理,Spring  管理事务超级简单

打开Spring 配置文件 applicationContext.xml,加入如下代码

 <bean id="autoProxy"
  class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
 </bean>


 <bean id="transactionAdvisor"
  class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
  <constructor-arg>
   <ref bean="transactionInterceptor" />
  </constructor-arg>
 </bean>


 <bean id="transactionInterceptor"
  class="org.springframework.transaction.interceptor.TransactionInterceptor">
  <property name="transactionManager">
   <ref bean="transactionManager" />
  </property>
  <property name="transactionAttributeSource">
   <ref bean="transactionAttributeSource" />
  </property>
 </bean>


 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref bean="sessionFactory" />
  </property>
 </bean>


 <bean id="transactionAttributeSource"
  class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
  <property name="properties">
   <props>
    <prop key="get*">PROPAGATION_SUPPORTS,readOnly</prop>
    <prop key="find*">PROPAGATION_SUPPORTS,readOnly</prop>
    <prop key="load*">PROPAGATION_SUPPORTS,readOnly</prop> 
      <prop key="search*">PROPAGATION_SUPPORTS,readOnly</prop> 
      <prop key="save*">PROPAGATION_REQUIRES_NEW</prop> 
      <prop key="add*">PROPAGATION_REQUIRES_NEW</prop> 
      <prop key="update*">PROPAGATION_REQUIRES_NEW</prop> 
       <prop key="remove*">PROPAGATION_REQUIRES_NEW</prop> 
        <prop key="delete*">PROPAGATION_REQUIRES_NEW</prop>

   </props>
  </property>
 </bean>

 

好了,一切都搞定了,注意红色部分,所有get,find,load...等开头的方法,都会自动套用对应的事务管理方案,你可以增加红色部分,适用新的方法。

实践建议:j2ee应用程序,一般有试图层,控制层,service层,dao层,事务控制应该在service完成,而自动代理,会代理系统所有类指定名称方法!所以,建议把所有service层方法以M结尾,然后设置<prop key="delete*M">PROPAGATION_REQUIRES_NEW</prop> ,

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值