隨筆 - 37  文章 - 14  trackbacks - 0
          <2007年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          相關(guān)鏈接

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          二、聲明式事務(wù)管理
                  Spring聲明式管理主要是通過(guò)TransactionProxyFactoryBean來(lái)包裝要管理的目標(biāo)對(duì)象,代理目標(biāo)對(duì)象要實(shí)現(xiàn)的接口。
          看如下代碼
          首先定義一個(gè)目標(biāo)對(duì)象

              <bean id="spcJlxDataSaveServiceTarget"
                  class
          ="com.spc.spring.business.service.SpcJlxDataSaveServiceImp"
                  abstract
          ="false" singleton="true" lazy-init="default"
                  autowire
          ="default" dependency-check="default">
                  
          <property name="spcGzxmServiceImp">
                      
          <ref bean="spcGzxmServiceImp" />
                  
          </property>
                  
          <property name="spcJlxDataService">
                      
          <ref bean="spcJlxDataService" />
                  
          </property>
              
          </bean>

          同編程式事務(wù)管理,都需要有transactionManager的對(duì)象,這里就不再重復(fù)設(shè)置;下面看如果設(shè)置TransactionProxyFactoryBean來(lái)代理目標(biāo)對(duì)象

               <bean id="spcJlxDataSaveServiceImp"
               class
          ="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
               
          <property name="proxyInterfaces">
                   
          <list>
                       
          <value>com.spc.spring.business.ISpcJlxDataSaveService</value>
                   
          </list>
               
          </property>
               
          <property name="target">
                   
          <ref bean="spcJlxDataSaveServiceTarget"/>
               
          </property>
               
          <property name="transactionManager">
                   
          <ref bean="transactionManager"/>
               
          </property>
               
          <property name="transactionAttributes">
                   
          <props>
                   
          <prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
                   
          </props>
               
          </property>
               
          </bean>

          target屬性是目標(biāo)對(duì)象;proxyInterface是目標(biāo)對(duì)象所實(shí)現(xiàn)的接口;transactionAttributes屬性是定義事務(wù)的設(shè)置級(jí)別等。其中"-Exception"表示對(duì)所有的異常都做回滾動(dòng)作。
          TransactionTemplatate
          如果要給對(duì)象添加更多的事務(wù)屬性,那么使用上述配置便會(huì)變得非常臃腫。為了避免該問(wèn)題你可以使用Transaction Template Beanr為了繼承這個(gè)bean
          的所有bean指定屬性如下,1:先定義一個(gè)tmplate bean

          <bean id="txProxyTemplate" abstract="true"
          class
          ="org.springframework.transaction.interceptor.
          TransactionProxyFactoryBean"
          >
          <property name="transactionManager">
          <ref bean="transactionManager"/>
          </property>
          <property name="transactionAttributes">
          <props>
          <prop key="save*">PROPAGATION_REQUIRED</prop>
          <prop key="remove*">PROPAGATION_REQUIRED</prop>
          <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
          </props>
          </property>
          </bean>
          2:創(chuàng)建一個(gè)應(yīng)用此模板的bean時(shí),使用parent屬性來(lái)引用此模板的id。然后在target屬性中將這個(gè)類定義為一個(gè)內(nèi)部bean
          <bean id="userManager" parent="txProxyTemplate">
          <property name="target">
          <bean class="org.appfuse.service.impl.UserManagerImpl">
          <property name="userDAO"><ref bean="userDAO"/></property>
          </bean>
          </property>
          </bean>
          TransactionAttributeSource
          另一種配置聲明式事務(wù)的是指定一個(gè)引用了NameMatchTransactionAttributeSource類并定義了方法和它們行為的bean。這種策略不及template bean簡(jiǎn)潔,因?yàn)樗笥肨ransactionProxyFactoryBean來(lái)包裝所有的bean。
          1:創(chuàng)建一個(gè)bean來(lái)描述事務(wù)屬性
          <bean name="txAttributes"
          class
          ="org.springframework.transaction.interceptor.
          NameMatchTransactionAttributeSource"
          >
          <property name="properties">
          <props>
          <prop key="save*">PROPAGATION_REQUIRED</prop>
          <prop key="remove*">PROPAGATION_REQUIRED</prop>
          <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
          </props>
          </property>
          </bean>

          2:創(chuàng)建一個(gè)包裝事務(wù)的bean定義,在transactionAttributeSource屬性中引用這個(gè)bean

          <bean id="userManager"
          class
          ="org.springframework.transaction.interceptor.
          TransactionProxyFactoryBean"
          >
          <property name="transactionManager">
          <ref bean="transactionManager"/>
          </property>
          <property name="target">
          <bean class="org.appfuse.service.impl.UserManagerImpl">
          <property name="userDAO">
          <ref bean="userDAO"/>
          </property>
          </bean>
          </property>
          <property name="transactionAttributeSource">
          <ref bean="txAttributes"/>
          </property>
          </bean>
          posted on 2007-08-09 14:46 扭曲的鉛筆 閱讀(255) 評(píng)論(0)  編輯  收藏 所屬分類: Spring
          主站蜘蛛池模板: 青冈县| 阿城市| 繁峙县| 微博| 九龙坡区| 贵南县| 商都县| 郑州市| 高州市| 增城市| 商城县| 保康县| 沙田区| 大关县| 兴山县| 宿迁市| 吴忠市| 鹿邑县| 邳州市| 吐鲁番市| 红安县| 博野县| 鄄城县| 宁强县| 长宁区| 府谷县| 巴彦淖尔市| 石棉县| 武威市| 海城市| 巩义市| 郴州市| 邛崃市| 班戈县| 玛曲县| 潼南县| 桃源县| 讷河市| 阿尔山市| 九龙城区| 马关县|