posts - 431,  comments - 344,  trackbacks - 0
          公告
           Don't Repeat Yourself
          座右銘:you can lose your money, you can spent all of it, and if you work hard you get it all back. But if you waste your time, you're never gonna get it back.
          公告本博客在此聲明部分文章為轉摘,只做資料收集使用。


          微信: szhourui
          QQ:109450684
          Email
          lsi.zhourui@gmail.com
          <2007年7月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          留言簿(15)

          隨筆分類(1019)

          文章分類(3)

          文章檔案(21)

          收藏夾

          Link

          好友博客

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 865034
          • 排名 - 44

          最新評論

          閱讀排行榜

          Spring的事務實現采用基于AOP的攔截器來實現,如果沒有在事務配置的時候注明回滾的checked exception,那么只有在發生了unchecked exception的時候,才會進行事務回滾。因此在DAO層和service層,最好拋出unckecked exception,畢竟對于數據庫操作,使用unckecked exception更加合適,這個方面的例子hibernate就是一個,在hibernate2中,HibernateException還是checked exceptions,但是到了hibernate3中就成了unchecked exceptions,因為對于數據庫操作來說,一旦出現異常,就是比較嚴重的錯誤,而且在client端基本上是無能為力的,所以使用unchecked exceptions更加合適。

          另外,在DAOservice層的代碼中,除非是為了異常的轉化、重新拋出,否則不要捕捉和處理異常,否則AOP在攔截的時候就不能捕捉到異常,也就不能正確執行回滾。這一點通常很容易被忽視,只有在明白了spring的事務處理機制后,才能領會到。

          對于hibernate的異常,spring會包裝hibernateupckecked hibernateExceptionDAOAccessException,并且拋出,在事務管理層,一旦接收到DAOAccessException就會觸發事務的回滾,同時該異常會繼續向上層拋出,供上層進一步處理,比如在UI層向用戶反饋錯誤信息等。
          在spring的事務管理環境下,使用unckecked exception可以極大地簡化異常的處理,只需要在事務層聲明可能拋出的異常(這里的異常可以是自定義的unckecked exception體系),在所有的中間層都只是需要簡單throws即可,不需要捕捉和處理,直接到最高層,比如UI層再進行異常的捕捉和處理。

          posted on 2007-07-16 15:23 周銳 閱讀(1020) 評論(2)  編輯  收藏 所屬分類: Spring
          主站蜘蛛池模板: 井冈山市| 湘潭市| 蒙阴县| 玉树县| 普定县| 清徐县| 马龙县| 广元市| 乌拉特前旗| 汝州市| 彭州市| 额尔古纳市| 安仁县| 西城区| 西乌珠穆沁旗| 浮梁县| 徐闻县| 元阳县| 铜川市| 成安县| 桦川县| 如东县| 鹿泉市| 海淀区| 雅安市| 新郑市| 秦皇岛市| 武义县| 固原市| 汤阴县| 包头市| 湛江市| 保定市| 陇川县| 宁国市| 大足县| 舒兰市| 榕江县| 乌什县| 宜兰市| 泗洪县|