Jason ---分享,共同進步

          激情成就夢想,努力創造未來
          隨筆 - 53, 文章 - 1, 評論 - 45, 引用 - 0
          數據加載中……

          spring 常識2

          1, Spring bean 定義

          spring bean 定義可能包含大量的配置信息,包括容器相關的信息(比如初始化方法,靜態工廠方法

          等)、構造函數參數、屬性等。如果兩個bean之間的配置信息大同小異,可采用bean的繼承來減少重

          復配置工作。子bean定義可以從父bean定義繼承部分配置。它也可覆蓋一些配置,或者添加一些配置

          。使用繼承配置可以節省很多輸入工作,實際上就是一種模板形式。

          spring中事務配置中就有這樣例子,為了使用事務只要父配置了事務代理就可以了,所有需要事務的

          bean只要繼承父就可以了。說到這個就在多說幾句,父bean通常不需要實例化的,而僅僅作為子bean

          定的的模板使用;而ApplicationContext默認預初始化所有的singleton bean。為了阻止父bean被預

          初始化,可以使用abstract屬性設置父bean為抽象bean。容器會忽略所有的抽象bean定義,預初始化

          時不初始化抽象bean

           

          2, spring 事務管理

          傳統的J2EE開發者對事務管理可能采用兩種策略

          (1),全局事務:全局事務通常由應用服務器管理,使用JTA。全局事務可跨越多個事務性的資源,保證

          在多個事務性資源間跨越時資源一致性。
          (2),局部事務:局部事務和特定資源相關,如,一個和JDBC鏈接關聯的事務。該事務盡能保證對該

          JDBC連接數據庫的一致性,對局部事務,應用服務器不需要參與事務管理,不能保證跨越多個資源的

          事務正確性。

           

          3,編程式事務

          Spring 提供兩種編程式的事務管理

           

          (1)使用TransactionTemplate事務管理

          (2)直接使用一個PlatformTransactionManager實現類管理事務。

           

          兩種編程式的事務都不需要與特定的事務API耦合,第一種更符合Spring模板式的編程模型,因此通常推薦采用第一種方式,第二種非常類似于JTA的UserTransaction的API編程,區別是減少了異常處理。

           

           

           

          4,聲明式事務

          Spring的聲明式事務是通過面向切面(AOP)實現。

          (1)使用聲明式事務管理

          通常,通過TransactionPoxyFactoryBean為目標Bean生成Spring事務代理。當bean實例的方法需要事務管理時,采用TransactionPoxyFactoryBean來自目標bean生成事務代理。每個TransactionPoxyFactoryBean為一個具體的目標bean生成代理對象,代理對象的方法改寫了目標bean的方法,就是在目標bean的方法執行之前加入開始事務,在目標bean方法結束之后提交事務,遇到指定異常回滾事務

           

              定義事務代理bean模板

          Xml代碼 復制代碼
          1. <bean id="txProxyTemplate" abstract="true"  
          2.     class="<SPAN style="COLOR: #ff0000">org.springframework.transaction.interceptor.TransactionProxyFactoryBean</SPAN>">  
          3.     <property name="transactionManager">  
          4.         <ref bean="transactionManager" />  
          5.     </property>  
          6.     <property name="transactionAttributes">  
          7.         <props>  
          8.             <prop key="trans_*">PROPAGATION_REQUIRED</prop>  
          9.             <prop key="query*">  
          10.                 PROPAGATION_REQUIRED,readOnly,-Exception   
          11.             </prop>  
          12.             <prop key="find*">  
          13.                 PROPAGATION_REQUIRED,readOnly,-Exception   
          14.             </prop>  
          15.             <prop key="load*">  
          16.                 PROPAGATION_REQUIRED,readOnly,-Exception   
          17.             </prop>  
          18.             <prop key="*">PROPAGATION_REQUIRED,-Exception</prop>  
          19.         </props>  
          20.     </property>  
          21. </bean>  

           

           

          (2)根據BeanName自動創建事務代理

          如果同一個應用中有很多目標bean需要生成事務代理,當然可以為每個目標bean額外配置一個TransactionPoxyFactoryBean bean.這樣做的缺點是,配置文件相當臃腫而且難以維護,此時可以考慮使用自動事務代理。自動事務代理的思路是,當ApplicationContext初始化完成后,由上下文中的某個bean"后處理"每個目標bean,為這些目標bean生成事務代理。

          能為目標bean執行"后處理"的bean必須實現BeanFactoryPostProcessor接口,ApplicationContext完成初始化后,會自動初始化所有實現BeanFactoryPostProcessor接口的bean,并且讓它“后處理”其他bean.Spring提供BeanFactoryPostProcessor的實現類BeanNameAutoPoxyCreatorBeanNameAutoPoxyCreator可以用來處理ApplicationContext中其他bean,方法是通過名稱來識別,并且把他們用事務代理包裝起來。BeanNameAutoPoxyCreator生成的事務代理,和使用TransactionPoxyFactoryBean生成的事務代理基本一致。

           

              定義事務攔截bean

          Xml代碼 復制代碼
          1.  <bean id="transactionInterceptor"  
          2.   class="<SPAN style="COLOR: #ff0000">org.springframework.transaction.interceptor.TransactionInterceptor</SPAN>">  
          3.   <property name="transactionManager" ref="TransactionManager" />  
          4.      
          5.   <property name="transactionAttributes">  
          6.    <props>  
          7.     <prop key="create*">  
          8.      PROPAGATION_REQUIRED,-Exception   
          9.     </prop>  
          10.     <prop key="delete*">  
          11.      PROPAGATION_REQUIRED,-Exception   
          12.     </prop>    
          13.     <prop key="update*">  
          14.      PROPAGATION_REQUIRED,-Exception   
          15.     </prop>           
          16.     <prop key="get*">PROPAGATION_REQUIRED</prop>  
          17.    </props>  
          18.   </property>  
          19.  </bean>  
          Xml代碼 復制代碼
          1.  <bean  
          2.   class="<SPAN style="COLOR: #ff0000">org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator</SPAN>">  
          3.   <property name="beanNames">  
          4.    <value>*Service</value>  
          5.   </property>  
          6.   <property name="interceptorNames">  
          7.    <list>  
          8.     <value>transactionInterceptor</value>  
          9.    </list>  
          10.   </property>  
          11.  </bean>   

           

          次配置關鍵在兩個bean

          TransactionInterceptor

          BeanNameAutoProxyCreator

           

          (3)基于注釋式事務代理配置

          posted on 2010-12-04 11:52 agun 閱讀(469) 評論(0)  編輯  收藏 所屬分類: java web架構設計與系統分析

          主站蜘蛛池模板: 策勒县| 金堂县| 青岛市| 泰和县| 乌审旗| 宾阳县| 西宁市| 磴口县| 赤峰市| 郓城县| 鹿邑县| 咸阳市| 加查县| 梁河县| 澄迈县| 新建县| 皮山县| 太湖县| 阿坝| 北流市| 华坪县| 广宁县| 霸州市| 宁远县| 柯坪县| 巴里| 搜索| 汨罗市| 大名县| 徐汇区| 辰溪县| 兖州市| 正宁县| 荃湾区| 石柱| 浪卡子县| 会东县| 盈江县| 武宁县| 昌黎县| 清水县|