Spring声明式事务功能应该是大家应用Spring中使用的最多的功能之一了,的确该功能极大的简化了大家对数据库操作的。目前Spring支持的声明式事务有两个配置方式,一种是XML配置方式,另一种是注解方式。在开发中最常用的还是XML配置方式。
PROPAGATION_REQUIRED使用当前事务,如果当前没有事务,则开启新事务。(常用)
<!-- spring关于事务TransactionManager的配置 -->
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<!-- 以get开头的方法 -->
<tx:method name="get*" read-only="true"/>
<!-- 默认的为 propagation="REQUIRED"-->
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<!-- 配置一个切入点,包下所有 以Impl结尾的类 spring.jar 和aspectJweaver.jar -->
<aop:config >
<aop:pointcut id="pcut" expression="execution(* com.allen.admin.service.impl.*.*(..))"/>
<!--制定在pointcut切入点应用txAdvice事务切面 出错则回滚 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pcut"/>
</aop:config>