1. 程式人生 > >宣告式事務管理通過註解配置和如何通過面向切面技術實現事務管理?

宣告式事務管理通過註解配置和如何通過面向切面技術實現事務管理?

第一種  註解的方式實現宣告式事務管理

<!-- 定義事務管理器 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
	
	<!-- 開啟事務控制的註解支援 -->
	<tx:annotation-driven transaction-manager="transactionManager"/>
@Transactional
public class MyBatisServiceImpl implements MyBatisService {
 
	@Autowired
	private MyBatisDao dao;
	
	
	@Override
	public void insert(Test test) {
		dao.insert(test);
		//丟擲unchecked異常,觸發事物,回滾
		throw new RuntimeException("test");
	}

第二種  如何通過面向切面的方式實現事務管理

<!-- 定義事務管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
</bean>

 <!-- 配置事務管理增強 -->
<!-- 配置事務管理增強 需要指定一個事物管理器-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="find*" propagation="SUPPORTS" />
            <tx:method name="add*" propagation="REQUIRED" />
            <tx:method name="del*" propagation="REQUIRED" />
            <tx:method name="update*" propagation="REQUIRED" />
            <tx:method name="*" propagation="REQUIRED" />
        </tx:attributes>
</tx:advice>

<!-- 定義切面 -->

<aop:config>
     <!-- 定義切入點,及切入點的表示式   和id --> 
        <aop:pointcut id="serviceMethod"
            expression="execution(* cn.kgc.service..*.*(..))" />
       <!-- 把增強的引用和切入點的引用組合起來-->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" />
    </aop:config>