一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Spring聲明式事務(wù)的四種方式

 posondlq 2013-12-09

Spring聲明式事務(wù)的四種方式

Spring中幾種常見的事務(wù)配置,是Aop和Ioc的充分體現(xiàn)
以下兩個(gè)bean的配置是下面要用到的。
<!-- 定義事務(wù)管理器(聲明式的事務(wù)) -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!-- *******業(yè)務(wù)邏輯層(是對(duì)各個(gè)DAO層的正面封裝)主要用到<<門面模式>>****** -->
<bean id="fundService"
class="com.jack.fund.service.serviceimpl.FundService">
<property name="operdao">
<ref bean="operatorDAO" />
</property>
<property name="producedao">
<ref bean="fundProduceDAO" />
</property>
<property name="customerdao">
<ref bean="customerDAO" />
</property>
<property name="accountdao">
<ref bean="accountDAO" />
</property>
<property name="fundaccountdao">
<ref bean="fundAccountDAO" />
</property>
<property name="fundtransdao">
<ref bean="fundTransDAO" />
</property>
</bean>
可能還有其他很多模塊。<bean id="fundService"/>可能只是其中的模塊。

第一種:配置聲明式事務(wù)的方法如下。也是我們最常用的方法了,它適用于你的庫表比較少的情況下。
<bean id="fundServiceDAOProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<!-- 配置事務(wù)管理器 -->
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<!-- 此屬性指定目標(biāo)類本身是否是代理的對(duì)象,如果目標(biāo)類沒有實(shí)現(xiàn)任何類,就設(shè)為true代表自己 -->
<property name="proxyTargetClass">
<value>false</value>
</property>
<property name="proxyInterfaces">
<value>com.jack.fund.service.IFundService</value>
</property>
<!-- 目標(biāo)bean -->
<property name="target">
<ref bean="fundService" />
</property>
<!-- 配置事務(wù)屬性 -->
<property name="transactionAttributes">
<props>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop   key="find*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
以下可能還有其他的xxxServiceDAOProxy.大家可以看出針對(duì)每一個(gè)功能模塊配置一個(gè)業(yè)務(wù)代理服務(wù)。如果模塊多大話,就顯得代碼有點(diǎn)多了,發(fā)現(xiàn)他們只是稍微一點(diǎn)不一樣。這時(shí)我們就應(yīng)該想到繼承的思想。用第二種方法。

第二種:配置聲明式事務(wù)的方法如下。這種情況適合相對(duì)比較多的模塊時(shí)使用。
<!-- 利用繼承的思想簡(jiǎn)化配置,要把a(bǔ)bstract="true" -->
<bean id="transactionBase"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
lazy-init="true" abstract="true">
<!-- 配置事務(wù)管理器 -->
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
...
</bean>
而具體的模塊可以簡(jiǎn)單的這樣配置。只要指明它的parent(父類)就可以了。父類一般把a(bǔ)bstract="true",因?yàn)樵谌萜骷虞d的時(shí)候不需要初始化,等到用的時(shí)候再有它的子類調(diào)用的時(shí)候,再去初始化。
<bean id="fundServiceDAOProxy" parent="transactionBase" >
<property name="target">
<ref bean="fundService" />
</property>
</bean>
這樣配置的話,如果有多個(gè)像fundService這樣模塊時(shí),可以少些很多重復(fù)的代碼。

第三種:
配置聲明式事務(wù)的方法如下。主要利用BeanNameAutoProxyCreator自動(dòng)創(chuàng)建事務(wù)代理
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
...
</bean>
<bean   class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>fundService</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
這種方法主要利用了攔截器的原理。

前三種方法一般都必需指定具體的模塊bean.如果模塊過多話,比如一個(gè)大型的網(wǎng)站一般有幾十個(gè)模塊。我們就得考慮用第四種的配置方式了。自動(dòng)創(chuàng)建事務(wù)代理的方式了。

第四種:配置聲明式事務(wù)的方法如下。
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
...
</bean>
<!-- 自動(dòng)代理 -->
<bean id="autoproxy"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 可以是Service或DAO層(最好是針對(duì)業(yè)務(wù)層*Service) -->
<property name="beanNames">
<list>
<value>*Service</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
自動(dòng)代理還有一種用法就是結(jié)合正規(guī)表達(dá)式和advice使用。
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
...
</bean>
<bean id="autoProxyCreator"
class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" />
<bean id="regexpMethodPointcutAdvisor"
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref bean="transactionInterceptor" />
</property>
<property name="pattern">
<value>.*</value>
</property>
</bean>
這個(gè)方法可以針對(duì)具體的模塊進(jìn)行攔截并進(jìn)行事務(wù)處理。在你的實(shí)際項(xiàng)目中,你可以根據(jù)你的情況選用不同的方法。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    久久亚洲精品中文字幕| 亚洲欧美中文字幕精品| 亚洲国产精品av在线观看| 成人精品国产亚洲av久久| 亚洲精品一二三区不卡| 99久久精品午夜一区二| 国产成人精品国产亚洲欧洲 | 国产精品午夜性色视频| 91一区国产中文字幕| 九七人妻一区二区三区| 久久精品国产在热久久| 婷婷九月在线中文字幕| 我想看亚洲一级黄色录像| 91亚洲国产成人久久| 91亚洲精品国产一区| 美女被草的视频在线观看| 午夜福利精品视频视频| 五月综合激情婷婷丁香| 视频在线免费观看你懂的| 精品日韩视频在线观看| 护士又紧又深又湿又爽的视频| 午夜精品一区免费视频| 在线观看日韩欧美综合黄片| 中文字幕乱码亚洲三区| 老司机精品一区二区三区| 日韩欧美第一页在线观看| 日韩av欧美中文字幕| 乱女午夜精品一区二区三区| 激情亚洲内射一区二区三区| 成人免费视频免费观看| 欧美日韩有码一二三区| 日韩不卡一区二区三区色图 | 果冻传媒精选麻豆白晶晶| 精品推荐国产麻豆剧传媒| 欧洲自拍偷拍一区二区| 日韩一区中文免费视频| 日韩18一区二区三区| 日本午夜福利视频免费观看| 国产欧美一区二区久久| 国产一区欧美午夜福利| 五月婷婷六月丁香狠狠|