<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 156,  comments - 601,  trackbacks - 0

    前言:

    本文章會通過連載的方式來深入了解和學習Spring相關核心技術和實現原理。包括SpringBean生命周期管理,聲明性事務管理,AOP管理,注解應用實現,以及在其上面進行擴展的相關應用。

    本篇技術文章將介紹Spring聲明式事務管理實現技術細節的剖析。

    首先看一下Spring基于XML方式的聲明式事務配置方法。(基于注解的也是相同,下篇在介紹Spring注解應用擴展實現時,會再介紹基于注解的Spring聲明式事務的實現細節)

    首先配置 BeanNameAutoProxyCreator 實現基于Bean 名稱規則匹配的AOP攔截

    示例代碼如下:



    從上面的配置示例中,可以發現Spring的聲明式事務由一個叫TransactionInterceptor AOP攔截器實現, 我們代碼的整體分析過程也是從這個類開始

    TransacionInterceptor的類描述如下,其實現了MethodInterceptor接口


    代碼主體邏輯都是invoke方法里

    下面是invoke方法的主要邏輯說明

    首先獲得攔載的方法名和類名,根據在xml文件的匹配規則,找出事務的配置規則,創建TransactionAttribute對象(如事務的讀寫屬性,傳播屬性,事務隔離級別等)

    如果匹配事務規則,則調用 createTransactionIfNecessary方法創建事務

    整理創建事務的過程,則會調用SpringPlatformTransactionManager的接口實現類,示例中配置的是HibernateTransactionManager

    整理個事務創建過程中,會用到兩個重要的對象,說明如下:

    HibernateTransactionObject 保存事務狀態(是否新事務,是否新的SessionHolder,以前對應的SessionHolder實例) SessionHolder則是用于保持Transaction對象實例,以及管理事務所需要相關信息如引用次數,是否只能回滾等。

    TransactionSynchronizationManager 管理當前線程的事務運行情況,所有的事務傳播嵌套處理都由它來控制管理,它會保存以下信息:

                            當前的事務名稱 currentTransactionName

                            當前只讀事務的狀態 currentTransactionReadOnly

                            當前事務使用的隔離級別 currentTransactionIsolationLevel

                            當前同步控制TransactionSynchronization對象synchronizations

                            當前的ResourceHolder對象實列,保存連接對象resources

    下面是創建事務的序列圖


    核心代碼及說明如下:

    在創建事務過程中,會檢測之前有沒有事務開啟,如果有則會根據當前方法上設置的事務的傳播信息來決定是否使用原來事務,還是掛起原來事務,或開啟新的事務等。

    AbstractPlatformTransactionManager.getTransaction方法


    是否新開啟事務最終會將該狀態設置到HibernateTransactionObjectnewSession屬性上。這樣在嵌套的方法退出時,可以由這個屬性來決定要不要真正的提交事務。

    封裝創建JDBC的事務代碼如下:HibernateTransactionManager.doBegin()方法


    事務的提交和回滾實現

    事務提交 TransactionInterceptorcommitTransactionAfterReturning來實現

    主要代碼如下:AbstractPlatformTransactionManager#commit方法


    事務回滾TransactionInterceptorcompleteTransactionAfterThrowing來實現

    主要代碼如下:AbstractPlatformTransactionManager#rollback方法


    基本上Spring的聲明式事務的基本實現原理都已經介紹完了,下面附上相關的源碼文件列表:

    TransactionInterceptor.java

    HiberanteTransactionManager.java

    AbstractPlatformTransactionManager.java

    TransactionSynchronizationManager.java

    SessionHolder.java

    ConnectionHolder.java

    TransactionStatus.java



    Good Luck!

    Yours Mattthew!

    posted on 2011-04-29 10:54 x.matthew 閱讀(2188) 評論(1)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 免费视频中文字幕| 中文字幕免费在线看线人| 午夜亚洲AV日韩AV无码大全| 97在线视频免费播放| 亚洲AV无码一区二区三区在线| 日韩一区二区在线免费观看 | 美女一级毛片免费观看| 中文亚洲AV片在线观看不卡| 精品香蕉在线观看免费| 看Aⅴ免费毛片手机播放| 亚洲一区免费观看| vvvv99日韩精品亚洲| 777爽死你无码免费看一二区| 国产亚洲精品91| 亚洲a∨无码男人的天堂| 中文字幕亚洲综合久久男男| 日本黄网站动漫视频免费| 丰满妇女做a级毛片免费观看| 中文有码亚洲制服av片| 久久久亚洲精品国产| 亚洲 无码 在线 专区| 在线观看免费毛片| 精品无码免费专区毛片| 国产日韩AV免费无码一区二区 | 久久精品亚洲日本佐佐木明希| 亚洲?v无码国产在丝袜线观看| 97视频免费在线| 91麻豆最新在线人成免费观看| 国产精品免费大片| 免费a级毛片无码a∨免费软件| 亚洲五月午夜免费在线视频| 美景之屋4在线未删减免费| 成人婷婷网色偷偷亚洲男人的天堂| 亚洲中文字幕乱码一区| 亚洲人成www在线播放| 亚洲综合久久精品无码色欲 | 国产精品青草视频免费播放| 污污免费在线观看| 一级人做人a爰免费视频| 精品无码一级毛片免费视频观看 | 亚洲AV永久无码精品一百度影院|