Spring声明式事务处理一

当我们整合spring与hibernate时,需要处理事务的限制。如果不处理,它会使用read-only来标识每一个操作,会让数据库只有只读属性。不能对其进行更改。因此我们要对事务进行一个显示的声明:
声明的方式有两种:一种是使用AOP切面对操作的接口进行事务的限制设置。一种是使用IOC注入的方式对事务进行限制处理。两种方式都是处理applicationContext.xml文件。
先说明第一种方式:
对applicationContext.xml文件中添加:
1、添加事务处理的bean
// 实施事务管理的 bean
<bean id=”transactionManager”
class=”org.springframwork.orm.hibernate3.HibernateTransactionManager”>
       <property name=”sessionFactory”>
           <ref bean=”sessionFactory” />
</property>
</bean>
2、添加事务限制处理
// 给事务添加的属性
<tx:advice id=”txAdvice” transaction-manager=”transactionManager”>
     <tx:attributes >
//propagation 表示的是事务的传播特性,使用 required 时,是当检测到 add 开头的方法时,就看此时有没有开启的事务,如果有则将方法放进事务中去,如果没有,则新建一个事务。然后将方法放进去。
          <tx:method name=”add*” propagation=”REQUIRED”>
          <tx:method name=”delete*” propagation=”REQUIRED”>
           <tx:method name=”update*” propagation=”REQUIRED”>
// 如果检测到其它的方法,则给其只读数据库的属性。即当本方法在读时,其它的方法不能再去写了。保证一个事务的完整性。
           <tx:method name=”*” read-only=”true”>
</tx:attributes>
</tx:advice>
3、添加AOP切面,对指定的接口操作或者对指定的包、子包、类进行指定
 
<aop:config>
      <aop:pointcut id=”allManagerMethod”
expression=”execution(*  com.hejianjiao.hibernate.HibernateDAO.*(..))”/>
// 调用上面配置的事务属性,可以将它给本 aop pointcut
      <aop:advisor advice-ref=”txAdvice” pointcut-ref=”allManagerMethod”/>
</aop:config>
//expression 中的内容是要执行本切面的一个接口,中的所有方法:如:一个接口中定义了操作数据的方法: com.hejianjiao.hibernate.HibernateDAO ,则下面 execution 括号中的内容就为: * com.hejianjiao.hibernate.HibernateDAO.*(..) 。而如果在 com.hejianjiao.hibernate 包中还有其它的类也有操作方法,我们要一起定义的话,就可以写为: *  com.hejianjiao.*.*(..) ,其中 (..) 表示的是方法。
上面的配置将为由 'HibernateDAO' 定义的 bean 创建一个代理对象,这个代理对象被装配了事务通知,所以当它的相应方法被调用时,一个事务将被启动、挂起、被标记为只读,或者其它(根据该方法所配置的事务语义)。
 

本文出自 “anysky130” 博客,转载请与作者联系!

你可能感兴趣的:(spring,事务,职场,休闲)