基於Aspectj AOP配置事務

1、事務認識
大家所瞭解的事務Transaction,它是一些列嚴密操作動作,要麼都操作完成,要麼都回滾撤銷。Spring事務管理基於底層數據庫本身的事務處理機制。數據庫事務的基礎,是掌握Spring事務管理的基礎。這篇總結下Spring事務。
事務具備ACID四種特性,ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔離性)和Durability(持久性)的英文縮寫。
(1)原子性(Atomicity)
事務最基本的操作單元,要麼全部成功,要麼全部失敗,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
(2)一致性(Consistency)
事務的一致性指的是在一個事務執行之前和執行之後數據庫都必須處於一致性狀態。如果事務成功地完成,那麼系統中所有變化將正確地應用,系統處於有效狀態。如果在事務中出現錯誤,那麼系統中的所有變化將自動地回滾,系統返回到原始狀態。
(3)隔離性(Isolation)
指的是在併發環境中,當不同的事務同時操縱相同的數據時,每個事務都有各自的完整數據空間。由併發事務所做的修改必須與任何其他併發事務所做的修改隔離。事務查看數據更新時,數據所處的狀態要麼是另一事務修改它之前的狀態,要麼是另一事務修改它之後的狀態,事務不會查看到中間狀態的數據。
(4)持久性(Durability)
指的是隻要事務成功結束,它對數據庫所做的更新就必須永久保存下來。即使發生系統崩潰,重新啓動數據庫系統後,數據庫還能恢復到事務成功結束時的狀態。
2.xml配置基於Aspectj AOP事務

<!--配置連接池-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql:///test?characterEncoding=UTF-8"></property>
        <property name="username" value="root"></property>
        <property name="password" value="123456"></property>
    </bean>
    <!--配置事務-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <constructor-arg name="dataSource" ref="dataSource"></constructor-arg>
    </bean>
    <tx:advice id="txAdvice" transaction-manager="transactionManager"></tx:advice>
    <!--proxy-target-class屬性值決定是基於接口的還是基於類的代理被創建。首先說明下proxy-target-class="true"和proxy-target-class="false"的區別,爲true則是基於類的代理將起作用(需要cglib庫),爲false或者省略這個屬性,則標準的JDK 基於接口的代理將起作用。-->
    <aop:config proxy-target-class="true">
    	<!--配置切入點-->
        <aop:pointcut id="pt" expression="execution(* cn.msg.service.impl.*.*(..))"></aop:pointcut>
        <!--綁定事務-->
        <aop:advisor  advice-ref="txAdvice" pointcut-ref="pt"></aop:advisor>
    </aop:config>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章