久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    菜鳥學(xué)SSH(六)

     喜氣蜘蛛 2015-05-05

    Spring是SSH中的管理員,負(fù)責(zé)管理其它框架,協(xié)調(diào)各個部分的工作。今天一起學(xué)習(xí)一下Spring的事務(wù)管理。Spring配置文件中關(guān)于事務(wù)配置總是由三個組成部分,分別是DataSource、TransactionManager和代理機(jī)制這三部分,無論哪種配置方式,一般變化的只是代理機(jī)制這部分。 DataSource、TransactionManager這兩部分只是會根據(jù)數(shù)據(jù)訪問方式有所變化,比如使用Hibernate進(jìn)行數(shù)據(jù)訪問時,DataSource實際為SessionFactory,TransactionManager的實現(xiàn)為HibernateTransactionManager。 下面一起看看三種聲明式事務(wù)的具體配置:



    公共配置

    1. <!-- 配置sessionFactory -->  
    2. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
    3.     <property name="configLocation">  
    4.         <value>classpath:config/hibernate.cfg.xml</value>  
    5.     </property>  
    6.     <property name="packagesToScan">  
    7.         <list>  
    8.             <value>com.entity</value>  
    9.         </list>  
    10.     </property>  
    11. </bean>  
    12.   
    13. <!-- 配置事務(wù)管理器(聲明式的事務(wù)) -->  
    14. <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
    15.     <property name="sessionFactory" ref="sessionFactory"></property>  
    16. </bean>  
    17.   
    18. <!-- 配置DAO -->   
    19. <bean id="userDao" class="com.dao.UserDaoImpl">  
    20.     <property name="sessionFactory" ref="sessionFactory"></property>  
    21. </bean>  


    第一種,使用tx標(biāo)簽方式

    1. <!-- 第一種配置事務(wù)的方式 ,tx-->  
    2. <tx:advice id="txadvice" transaction-manager="transactionManager">  
    3.     <tx:attributes>  
    4.         <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception" />  
    5.         <tx:method name="modify*" propagation="REQUIRED" rollback-for="Exception" />  
    6.         <tx:method name="del*" propagation="REQUIRED" rollback-for="Exception"/>  
    7.         <tx:method name="*" propagation="REQUIRED" read-only="true"/>  
    8.     </tx:attributes>  
    9. </tx:advice>  
    10.   
    11. <aop:config>  
    12.     <aop:pointcut id="daoMethod" expression="execution(* com.dao.*.*(..))"/>  
    13.     <aop:advisor pointcut-ref="daoMethod" advice-ref="txadvice"/>  
    14. </aop:config>  
    expression="execution(* com.dao.*.*(..))"
    其中第一個*代表返回值,第二*代表dao下子包,第三個*代表方法名,“(..)”代表方法參數(shù)。



    第二種,使用代理方式

    1. <!-- 第二種配置事務(wù)的方式 ,代理-->  
    2. <bean id="transactionProxy"  
    3.     class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">  
    4.     <property name="transactionManager" ref="transactionManager"></property>  
    5.     <property name="transactionAttributes">  
    6.         <props>  
    7.             <prop key="add*">PROPAGATION_REQUIRED, -Exception</prop>  
    8.             <prop key="modify*">PROPAGATION_REQUIRED, -Exception</prop>  
    9.             <prop key="del*">PROPAGATION_REQUIRED, -Exception</prop>  
    10.             <prop key="*">PROPAGATION_REQUIRED, readOnly</prop>  
    11.         </props>  
    12.     </property>  
    13. </bean>  
    14. <bean id="userDao" parent="transactionProxy">  
    15.     <property name="target">  
    16.         <!-- 用bean代替ref的方式-->  
    17.         <bean class="com.dao.UserDaoImpl">  
    18.             <property name="sessionFactory" ref="sessionFactory"></property>  
    19.         </bean>  
    20.     </property>  
    21. </bean>  
    將transactionProxy的abstract屬性設(shè)置為"true",然后將具體的Dao的parent屬性設(shè)置為"transactionProxy",可以精簡代碼。

    第三種,使用攔截器

    1. <!-- 第三種配置事務(wù)的方式,攔截器 (不常用)-->  
    2. <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">  
    3.     <property name="transactionManager" ref="transactionManager"></property>  
    4.     <property name="transactionAttributes">  
    5.         <props>  
    6.             <prop key="add*">PROPAGATION_REQUIRED, -Exception</prop>  
    7.             <prop key="modify*">PROPAGATION_REQUIRED, -Exception</prop>  
    8.             <prop key="del*">PROPAGATION_REQUIRED, -Exception</prop>  
    9.             <prop key="*">PROPAGATION_REQUIRED, readOnly</prop>  
    10.         </props>  
    11.     </property>  
    12. </bean>  
    13. <bean id="proxyFactory" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
    14.     <property name="interceptorNames">  
    15.         <list>  
    16.             <value>transactionInterceptor</value>  
    17.         </list>  
    18.     </property>  
    19.     <property name="beanNames">  
    20.         <list>  
    21.             <value>*Dao</value>  
    22.         </list>  
    23.     </property>  
    24. </bean>  


    Spring事務(wù)類型詳解:


    PROPAGATION_REQUIRED--支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就新建一個事務(wù)。這是最常見的選擇。

    PROPAGATION_SUPPORTS--支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就以非事務(wù)方式執(zhí)行。

    PROPAGATION_MANDATORY--支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就拋出異常。

    PROPAGATION_REQUIRES_NEW--新建事務(wù),如果當(dāng)前存在事務(wù),把當(dāng)前事務(wù)掛起。

    PROPAGATION_NOT_SUPPORTED--以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起。

    PROPAGATION_NEVER--以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常。

    PROPAGATION_NESTED--如果當(dāng)前存在事務(wù),則在嵌套事務(wù)內(nèi)執(zhí)行。如果當(dāng)前沒有事務(wù),則進(jìn)行與PROPAGATION_REQUIRED類似的操作。




    采用注解的方式,需要注意的是,使用注解的方式需要在Spring的配置文件中加入一句話:<context:annotation-config />,其作用是開啟注解的方式。具體配置如下:


    1. <!--開啟注解方式-->  
    2. <context:annotation-config />  
    3.   
    4. <!-- 配置sessionFactory -->  
    5. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
    6.     <property name="configLocation">  
    7.         <value>classpath:config/hibernate.cfg.xml</value>  
    8.     </property>  
    9.     <property name="packagesToScan">  
    10.         <list>  
    11.             <value>com.entity</value>  
    12.         </list>  
    13.     </property>  
    14. </bean>  
    15.   
    16. <!-- 配置事務(wù)管理器 -->  
    17. <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
    18.     <property name="sessionFactory" ref="sessionFactory"></property>  
    19. </bean>  
    20.   
    21. <!-- 第四種配置事務(wù)的方式,注解 -->  
    22. <tx:annotation-driven transaction-manager="transactionManager"/>  

    注解文件:

    1. package com.dao;  
    2.   
    3. import org.springframework.orm.hibernate3.HibernateTemplate;  
    4. import org.springframework.transaction.annotation.Propagation;  
    5. import org.springframework.transaction.annotation.Transactional;  
    6.   
    7. import com.entity.User;  
    8.   
    9. @Transactional  
    10. public class UserDaoImpl_BAK extends HibernateTemplate {  
    11.   
    12.     @Transactional(propagation=Propagation.REQUIRED,rollbackForClassName="Exception")  
    13.     public void addUser(User user) throws Exception {  
    14.         this.save(user);  
    15.     }  
    16.   
    17.     @Transactional(propagation=Propagation.REQUIRED,rollbackForClassName="Exception")  
    18.     public void modifyUser(User user) {  
    19.         this.update(user);  
    20.     }  
    21.   
    22.     @Transactional(propagation=Propagation.REQUIRED,rollbackForClassName="Exception")  
    23.     public void delUser(String username) {  
    24.         this.delete(this.load(User.class, username));  
    25.     }  
    26.   
    27.     @Transactional(readOnly=true)  
    28.     public void selectUser() {  
    29.   
    30.     }  
    31.   
    32. }  

    類頭的@Transactional為默認(rèn)事務(wù)配置,如方法沒有自己的事務(wù)類型,則按默認(rèn)事務(wù),如有自己的配置,則按自己的配置。


    以上四種配置方式最常用的還是第一、二種,第三種是比較老舊的方式,而注解的方式不太適合比較大的項目,用于簡單的小項目還是很好的,其特點就是簡單明了。每種方法都有每種方法的特點跟適用的環(huán)境,沒有絕對的好與壞,只不過前兩種在實際的工作當(dāng)中用的更多一些。


    好了,今天就到這里吧,看了這么長的文章,相信大家都累了,也不想再聽我在這里廢話了,哈哈。歡迎交流,歡迎拍磚。




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

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 十八禁午夜福利免费网站| 成人无码潮喷在线观看| 亚洲欧美综合中文| 国产SM重味一区二区三区| 精品超清无码视频在线观看| 九九在线精品国产| 天天做天天爱天天爽综合网| 不卡一区二区国产在线| 无码精品人妻一区二区三区中| 国产精品亚洲二区在线看| 中文字幕乱码一区二区免费| 精品无人区无码乱码毛片国产| 伊人久久大香线蕉AV网禁呦| 国产欧美日韩另类精彩视频| 亚洲一区二区精品动漫| 欧美巨鞭大战丰满少妇| 亚洲熟妇自偷自拍另类| 88国产精品视频一区二区三区| 99热精品毛片全部国产无缓冲| 色橹橹欧美在线观看视频高清| 日韩精品国产二区三区| 亚洲一区二区三区影院| 亚洲一二三区精品美妇| 果冻传媒亚洲区二期| 国产日产精品系列| 无码囯产精品一区二区免费| 国产成人MV视频在线观看| 欧美高清精品一区二区| 午夜精品福利亚洲国产| 看全色黄大色大片免费久久| 亚洲人成电影在线天堂色| 夜夜未满十八勿进的爽爽影院| 欧美亚洲日本国产综合在线美利坚| 国产成人精品久久综合| 久久不见久久见免费视频观看| 亚洲国产精品无码一区二区三区| 久久精品国产亚洲AV瑜伽| 亚洲人成电影网站 久久影视| 亚洲欧美日韩国产综合一区二区| 国内自拍视频一区二区三区| 亚洲熟女精品一区二区|