spring事务管理

在以往的JDBC Template中事务提交成功,异常处理都是通过Try/Catch来完成。而在框架整合中,管理事务的只有Spring而已,如没有Spring,就通过hibernate本身也可以管理事务,struts根本就接触不到持久层,谈不上事务。Spring管理事务是可以通过AOP机制,将TransactionInterceptor加在需要被事物管理的最小工作单元上,一般是Service业务层spring就可以管理事务了,其本质是管理Session的打开和关闭的时机以及提交和回滚的操作。
Spring容器集成了TransactionTemplate,她封装了所有对事务处理的功能,包括异常时事务回滚,操作成功时数据提交等复杂业务功能。这都是由Spring容器来管理,大大减少了程序员的代码量,也对事务有了很好的管理控制。Hibernate中也有对事务的管理,hibernate中事务管理是通过SessionFactory创建和维护Session来完成。而Spring对SessionFactory配置也进行了整合,不需要在通过hibernate.cfg.xml来对SessionaFactory进行设定。这样的话就可以很好的利用Sping对事务管理强大功能。避免了每次对数据操作都要现获得Session实例来启动事务/提交/回滚事务还有繁琐的Try/Catch操作。这些也就是Spring中的AOP(面向切面编程)机制很好的应用。一方面使开发业务逻辑更清晰、专业分工更加容易进行。另一方面就是应用SpirngAOP隔离降低了程序的耦合性使我们可以在不同的应用中将各个切面结合起来使用大大提高了代码重用度。

<?xml version="1.0" encoding="UTF-8"?>
<beans default-autowire="byName"
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
       http://www.springframework.org/schema/tx 
       http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

  ......

  <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
      <ref bean="sessionFactory"/>
    </property>  
  </bean>  
  
  <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
      <tx:method name="*Add" propagation="REQUIRED"/>
      <tx:method name="*Update" propagation="REQUIRED"/>
      <tx:method name="*Delete" propagation="REQUIRED"/>
      <tx:method name="*" read-only="true"/> 
    </tx:attributes>
  </tx:advice>

  <aop:config>
    <aop:pointcut id="allManagerMethod" expression="execution(* com.shawnqiu.service.*.*(..))"/>
    <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
  </aop:config>
  
</beans>

你可能感兴趣的:(spring,AOP,编程,Hibernate,配置管理)