Spring聲明式事務配置管理方法
環境配置
項目使用SSH架構,現在要添加Spring事務管理功能,針對當前環境,只需要添加Spring2.0AOP類庫即可。添加方法:
點擊項目右鍵->BuildPath->Addlibrarys:
打開AddLibraries對話框,然后選定MyEclipseLibraries:
點擊Next,找到Spring2.0aopLibraries并勾選上,點擊finsh即可。
如果在項目里面能看到下面的庫文件,說明已經安裝成功。
事務配置
首先在/WEB-INF/applicationContext.xml添加以下內容:
<!--配置事務管理器--> <beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <propertyname="sessionFactory"> <refbean="mySessionFactory"/> </property> </bean> |
注:這是作為公共使用的事務管理器Bean。這個會是事先配置好的,不需各個模塊各自去配。
下面就開始配置各個模塊所必須的部分,在各自的applicationContext-XXX-beans.xml配置的對于事務管理的詳細信息。
首先就是配置事務的傳播特性,如下:
<!--配置事務傳播特性--> <tx:adviceid="TestAdvice"transaction-manager="transactionManager"> <tx:attributes> <tx:methodname="save*"propagation="REQUIRED"/> <tx:methodname="del*"propagation="REQUIRED"/> <tx:methodname="update*"propagation="REQUIRED"/> <tx:methodname="add*"propagation="REQUIRED"/> <tx:methodname="find*"propagation="REQUIRED"/> <tx:methodname="get*"propagation="REQUIRED"/> <tx:methodname="apply*"propagation="REQUIRED"/> </tx:attributes> </tx:advice> <!--配置參與事務的類--> <aop:config> <aop:pointcutid="allTestServiceMethod"expression="execution(*com.test.testAda.test.model.service.*.*(..))"/> <aop:advisorpointcut-ref="allTestServiceMethod"advice-ref="TestAdvice"/> </aop:config> |
需要注意的地方:
(1)advice(建議)的命名:由于每個模塊都會有自己的Advice,所以在命名上需要作出規范,初步的構想就是模塊名+Advice(只是一種命名規范)。
(2)tx:attribute標簽所配置的是作為事務的方法的命名類型。
如<tx:methodname="save*"propagation="REQUIRED"/>
其中*為通配符,即代表以save為開頭的所有方法,即表示符合此命名規則的方法作為一個事務。
propagation="REQUIRED"代表支持當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。
(3)aop:pointcut標簽配置參與事務的類,由于是在Service中進行數據庫業務操作,配的應該是包含那些作為事務的方法的Service類。
首先應該特別注意的是id的命名,同樣由于每個模塊都有自己事務切面,所以我覺得初步的命名規則因為all+模塊名+ServiceMethod。而且每個模塊之間不同之處還在于以下一句:
expression="execution(*com.test.testAda.test.model.service.*.*(..))"
其中第一個*代表返回值,第二*代表service下子包,第三個*代表方法名,“(..)”代表方法參數。
(4)aop:advisor標簽就是把上面我們所配置的事務管理兩部分屬性整合起來作為整個事務管理。
圖解:
posted on 2014-10-30 11:35 順其自然EVO 閱讀(225) 評論(0) 編輯 收藏 所屬分類: 測試學習專欄