Spring中編程式事務與申明式事務的配置步驟

編程式事務(少用):

  a) 需要事務處理的dao類需繼承NamedParameterJdbcDaoSupport這個類;

  b) 在applicationContext.xml文件中配置這個dao的Bean以及數據源Bean;

  c) 往dao中注入數據源;

  d) 配置事務管理器,並往事務管理器中注入數據源;

  e) 往dao中注入事務管理器

 

  a) 需要事務處理的dao類需繼承NamedParameterJdbcDaoSupport這個類;

  b) 在applicationContext.xml文件中配置這個dao的Bean以及數據源Bean;

  c) 往dao中注入數據源;

  d) 配置事務管理器,並往事務管理器中注入數據源;

  e) 配置事務模板,並往事務模板中注入事務管理器;

  f) 往dao中注入事務模板。

 

 總結:dao(繼承NamedParameterJdbcDaoSupport,並注入數據源)-->事務模板-->事務管理器(數據源)-->數據源

 

 

申明式事務:

  1)使用代理工廠:

       

   步驟1:聲明委託對象,如:
   
     
   步驟2:定義事務管理器,如:
   
 
    
  步驟3:創建事務代理父工廠
 
  
注意:1. abstract=true 說明該工廠爲抽象工廠,無法進行對象處理,只能被繼承
     2. transactionAttributes表示設置事務的傳播屬性
 
   步驟4:創建事務子工廠
  
  
步驟5:調用:往需要userDao對象的調用者注入userDao
   注意:注入的是代理了userdao對象的事務子工廠,並且使用接口聲明。
   如:IUserDao userDaoProxy;
   //省略getset方法
2)使用命名空間(一般使用這個):

 

  步驟1:引入命名空間

   

 

  步驟2:定義事務通知者advice
  

     

  步驟3:再通過aop織入

     

這就是定義了一個PointCut,該Pointcut表示com.softfz.jdbcTemplate包下所有的方法
expression="execution(* com.cj.transaction.service.*.*(..))" 中幾個通配符的含義:
第一個 * —— 通配 任意返回值類型
第二個 * —— 通配 com.cj.transaction.service下的任意class
第三個 * —— 通配 com.cj.transaction.service下的任意class的任意方法
第四個 .. —— 通配 方法可以有0個或多個參數
注意:第一個*後面有一個空格
申明式事務中異常處理:

     

Spring中,將爲委託對象的每個方法創建事務,Spring的事務支持默認對運行期異常(RuntimeException)進行回滾 ,而RuntimeException無需開發者顯式聲明。
如果手動捕獲異常,則spring容器認爲開發者試圖進行手動事務回滾,將無法用spring容器來進行事務回滾。
但是如果是發生非RuntimeException及其子類的異常,則spring容器無法進行事務處 ,如果需要管理,需要進行相關配置,代碼如下:
<!-- +提交,-回滾,後面爲異常類型,表示該方法如果拋出這個異常則進行相應的事務處理 -->
<props>
<prop key="*">PROPAGATION_REQUIRED,-FileNotFoundException</prop>
<prop key="list">readOnly</prop>
</props>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章