Spring提供的事務管理有兩種方式,編程式的和聲明式的. 編程式的繁瑣,我一般不喜歡用.最喜歡的一種是利用Spring封裝的aspectJ, 利用Aop來管理事務很方便的.applicationcontext.xml1首先創(chuàng)建一個事務管理器<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"> </property> </bean>2聲明一個通知, 并聲明此通知受某一個事務管理器管理<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="save*" /> <tx:method name="*" readonly="true" /> </tx:attributes> </tx:advice>上面的一段話說明了txAdvice受transactionManager事務管理器管理, 并且管理save打頭的方法. 其余的都不使用事務管理.3最后利用advisor配置advice的切入點.<aop:config> <aop:advisor advice-ref="txAdvice"pointcut="execution(pulic * *..*.service.*.*(..))"></aop:advisor> </aop:config>這樣, 只要經(jīng)過service層就會進入事務管理.(begin - save - commit)動態(tài)代理我想問為什么 經(jīng)過service層就會進入事務管理 別說動態(tài)代理 具體是怎么做的
5 回答

浮云間
TA貢獻1829條經(jīng)驗 獲得超4個贊
我想這個問題的關鍵在于理解AOP上。
面向切面(AOP)的實現(xiàn)很大程度上依賴的是控制扭轉(zhuǎn)(IOC),這兩個概念就不詳細說了,百度一下都能找到。
關鍵點在于控制扭轉(zhuǎn)上,正常的程序控制是有由你,也就是編程者進行的。而控制扭轉(zhuǎn)后,實際上程序的控制著是實現(xiàn)控制扭轉(zhuǎn)的框架,這里就是Spring。所以你有一個很關鍵的誤解,就是我調(diào)用我的代碼
。實際上調(diào)用你代碼的不是你,而是框架,既然調(diào)用你程序的是框架,那它自然就有機會去查詢你的代碼里是否有面向切面的配置,如果有,它也有機會去執(zhí)行這些配置
添加回答
舉報
0/150
提交
取消