<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Jason ---分享,共同進(jìn)步

    激情成就夢(mèng)想,努力創(chuàng)造未來
    隨筆 - 53, 文章 - 1, 評(píng)論 - 45, 引用 - 0
    數(shù)據(jù)加載中……

    spring 常識(shí)2

    1, Spring bean 定義

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

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

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

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

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

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

    定的的模板使用;而ApplicationContext默認(rèn)預(yù)初始化所有的singleton bean。為了阻止父bean被預(yù)

    初始化,可以使用abstract屬性設(shè)置父bean為抽象bean。容器會(huì)忽略所有的抽象bean定義,預(yù)初始化

    時(shí)不初始化抽象bean

     

    2, spring 事務(wù)管理

    傳統(tǒng)的J2EE開發(fā)者對(duì)事務(wù)管理可能采用兩種策略

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

    在多個(gè)事務(wù)性資源間跨越時(shí)資源一致性。
    (2),局部事務(wù):局部事務(wù)和特定資源相關(guān),如,一個(gè)和JDBC鏈接關(guān)聯(lián)的事務(wù)。該事務(wù)盡能保證對(duì)該

    JDBC連接數(shù)據(jù)庫(kù)的一致性,對(duì)局部事務(wù),應(yīng)用服務(wù)器不需要參與事務(wù)管理,不能保證跨越多個(gè)資源的

    事務(wù)正確性。

     

    3,編程式事務(wù)

    Spring 提供兩種編程式的事務(wù)管理

     

    (1)使用TransactionTemplate事務(wù)管理

    (2)直接使用一個(gè)PlatformTransactionManager實(shí)現(xiàn)類管理事務(wù)。

     

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

     

     

     

    4,聲明式事務(wù)

    Spring的聲明式事務(wù)是通過面向切面(AOP)實(shí)現(xiàn)。

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

    通常,通過TransactionPoxyFactoryBean為目標(biāo)Bean生成Spring事務(wù)代理。當(dāng)bean實(shí)例的方法需要事務(wù)管理時(shí),采用TransactionPoxyFactoryBean來自目標(biāo)bean生成事務(wù)代理。每個(gè)TransactionPoxyFactoryBean為一個(gè)具體的目標(biāo)bean生成代理對(duì)象,代理對(duì)象的方法改寫了目標(biāo)bean的方法,就是在目標(biāo)bean的方法執(zhí)行之前加入開始事務(wù),在目標(biāo)bean方法結(jié)束之后提交事務(wù),遇到指定異常回滾事務(wù)

     

        定義事務(wù)代理bean模板

    Xml代碼 復(fù)制代碼
    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)根據(jù)BeanName自動(dòng)創(chuàng)建事務(wù)代理

    如果同一個(gè)應(yīng)用中有很多目標(biāo)bean需要生成事務(wù)代理,當(dāng)然可以為每個(gè)目標(biāo)bean額外配置一個(gè)TransactionPoxyFactoryBean bean.這樣做的缺點(diǎn)是,配置文件相當(dāng)臃腫而且難以維護(hù),此時(shí)可以考慮使用自動(dòng)事務(wù)代理。自動(dòng)事務(wù)代理的思路是,當(dāng)ApplicationContext初始化完成后,由上下文中的某個(gè)bean"后處理"每個(gè)目標(biāo)bean,為這些目標(biāo)bean生成事務(wù)代理。

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

     

        定義事務(wù)攔截bean

    Xml代碼 復(fù)制代碼
    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代碼 復(fù)制代碼
    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>   

     

    次配置關(guān)鍵在兩個(gè)bean

    TransactionInterceptor

    BeanNameAutoProxyCreator

     

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

    posted on 2010-12-04 11:52 agun 閱讀(476) 評(píng)論(0)  編輯  收藏 所屬分類: java web架構(gòu)設(shè)計(jì)與系統(tǒng)分析

    主站蜘蛛池模板: 免费三级毛片电影片| 亚洲综合无码无在线观看| 色老头综合免费视频| 日本免费v片一二三区| 亚洲三级高清免费| 亚洲国产美女视频| 免费无码又爽又刺激高潮视频 | 在线观看AV片永久免费| 国产在线观看免费不卡 | 久久久亚洲欧洲日产国码是AV| 亚洲日本香蕉视频| 国产成人精品免费视频网页大全| 亚洲第一页在线播放| 日本XXX黄区免费看| 亚洲国产情侣一区二区三区| 亚洲精品无码专区在线播放| 日韩在线一区二区三区免费视频| 扒开双腿猛进入爽爽免费视频| 97在线免费观看视频| 拍拍拍无挡视频免费观看1000| 精品国产sm捆绑最大网免费站| 亚洲jjzzjjzz在线播放| 免费高清A级毛片在线播放| 午夜精品一区二区三区免费视频| 亚洲欧洲在线观看| 黄色成人网站免费无码av| 羞羞视频免费网站含羞草| 和日本免费不卡在线v| 亚洲精品无码成人片久久不卡| 国产亚洲精午夜久久久久久| 78成人精品电影在线播放日韩精品电影一区亚洲| 在线观看黄片免费入口不卡| 久久久久亚洲AV片无码下载蜜桃| 国产精品99爱免费视频| 亚洲va无码专区国产乱码| 日产久久强奸免费的看| 亚洲区小说区激情区图片区| 精品国产sm捆绑最大网免费站 | 性色av免费观看| 亚洲精品视频免费看| 日本免费无遮挡吸乳视频电影|