首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring AOP 聲明式事務管理實戰:XML 配置詳解與切點表達式解析

     編輯:Java 綜合教學

方案一:JDBC 數據源 + DataSourceTransactionManager

<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:tx="https://www.springframework.org/schema/tx"
       xmlns:aop="https://www.springframework.org/schema/aop" ...>

    <!-- 數據源 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/TEST"/>
        <property name="username" value="root"/>
        <property name="password" value="cohondob"/>
    </bean>

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

    <!-- 事務增強屬性:create 方法啟動事務 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="create"/>
        </tx:attributes>
    </tx:advice>

    <!-- AOP 配置:切點 + 增強織入 -->
    <aop:config>
        <aop:pointcut id="createOperation"
            expression="execution(* com.tutorialspoint.StudentJDBCTemplate.create(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="createOperation"/>
    </aop:config>

    <bean id="studentJDBCTemplate" class="com.tutorialspoint.StudentJDBCTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

方案二:Hibernate + HibernateTransactionManager

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

    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="add*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <!-- <tx:method name="*" propagation="REQUIRED"/> -->
        </tx:attributes>
    </tx:advice>

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

切點表達式通配符詳解

execution(* com.evan.crm.service.*.*(..))

位置符號含義
1*任意返回值類型
2*包下任意類
3*類中任意方法
4..任意參數列表(0個或多個)

關鍵點總結

  • tx:advice 定義事務屬性(傳播行為、隔離級別、只讀、超時、回滾異常)
  • aop:pointcut 用 AspectJ 表達式精準定位連接點
  • aop:advisor 將增強織入切點,實現聲明式事務
  • 推薦在 Service 層切面,而非 DAO 層,保證業務邏輯原子性

參考資料:
ITEye 博客
極客學院 Wiki

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved