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

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

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

    babayao  
    日歷
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567
    統計
    • 隨筆 - 0
    • 文章 - 4
    • 評論 - 0
    • 引用 - 0

    導航

    留言簿

    文章檔案

    搜索

    •  

    最新評論

     

       
    前段時間對Spring的事務配置做了比較深入的研究,在此之間對Spring的事務配置雖說也配置過,但是一直沒有一個清楚的認識。通過這次的學習發覺Spring的事務配置只要把思路理清,還是比較好掌握的。


        總結如下:


       
    Spring配置文件中關于事務配置總是由三個組成部分,分別是DataSource、TransactionManager和代理機制這三部分,無論哪種配置方式,一般變化的只是代理機制這部分。


       
    DataSource、TransactionManager這兩部分只是會根據數據訪問方式有所變化,比如使用Hibernate進行數據訪問時,DataSource實際為SessionFactory,TransactionManager的實現為HibernateTransactionManager。


        具體如下圖:


    Spring事務配置 (2)


        根據代理機制的不同,總結了五種Spring事務的配置方式,配置文件如下:


        第一種方式:每個Bean都有一個代理


    <?xml version="1.0" encoding="UTF-8"?>
    <beans
    xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context
    ="http://www.springframework.org/schema/context"
        xmlns:aop
    ="http://www.springframework.org/schema/aop"
       
    xsi:schemaLocation
    ="http://www.springframework.org/schema/beans

              
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
              
    http://www.springframework.org/schema/context
              
    http://www.springframework.org/schema/context/spring-context-2.5.xsd
              
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
    >

       
    <bean
    id="sessionFactory" 
                class
    ="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 

           
    <property name="configLocation" value="classpath:hibernate.cfg.xml" /> 

           
    <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
       
    </bean> 


       
    <!-- 定義事務管理器(聲明式的事務) --> 

       
    <bean id="transactionManager"
            class
    ="org.springframework.orm.hibernate3.HibernateTransactionManager">
           
    <property name="sessionFactory" ref="sessionFactory" />
       
    </bean>
       

       
    <!-- 配置DAO -->
       
    <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
           
    <property name="sessionFactory" ref="sessionFactory" />
       
    </bean>
       

       
    <bean id="userDao" 

            class
    ="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 

              
    <!-- 配置事務管理器 --> 

              
    <property name="transactionManager" ref="transactionManager" />    

           
    <property name="target"
    ref
    ="userDaoTarget" /> 

            
    <property name="proxyInterfaces" value="com.bluesky.spring.dao.GeneratorDao" />
           
    <!--
    配置事務屬性
    --> 
           
    <property name="transactionAttributes"> 

               
    <props> 

                   
    <prop key="*">PROPAGATION_REQUIRED</prop>
               
    </props> 

           
    </property> 
       
    </bean> 

    </beans>

        第二種方式:所有Bean共享一個代理基類


    <?xml version="1.0" encoding="UTF-8"?>
    <beans
    xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context
    ="http://www.springframework.org/schema/context"
        xmlns:aop
    ="http://www.springframework.org/schema/aop"
        xsi:schemaLocation
    ="http://www.springframework.org/schema/beans

              
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
              
    http://www.springframework.org/schema/context
              
    http://www.springframework.org/schema/context/spring-context-2.5.xsd
              
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
    >

       
    <bean
    id="sessionFactory" 
                class
    ="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 

           
    <property name="configLocation" value="classpath:hibernate.cfg.xml" /> 

           
    <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
       
    </bean> 


       
    <!-- 定義事務管理器(聲明式的事務) --> 

       
    <bean id="transactionManager"
            class
    ="org.springframework.orm.hibernate3.HibernateTransactionManager">
           
    <property name="sessionFactory" ref="sessionFactory" />
       
    </bean>
       

       
    <bean id="transactionBase" 
                class
    ="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" 
                lazy-init
    ="true"
    abstract
    ="true"> 

           
    <!-- 配置事務管理器 --> 

           
    <property name="transactionManager" ref="transactionManager" /> 

           
    <!-- 配置事務屬性 --> 

           
    <property name="transactionAttributes"> 

               
    <props> 

                   
    <prop key="*">PROPAGATION_REQUIRED</prop> 

               
    </props> 

           
    </property> 
       
    </bean>   

      
       
    <!-- 配置DAO -->
       
    <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
           
    <property name="sessionFactory" ref="sessionFactory" />
       
    </bean>
       

       
    <bean id="userDao"
    parent
    ="transactionBase" > 

           
    <property name="target"
    ref
    ="userDaoTarget" />  

       
    </bean>
    </beans>

    第三種方式:使用攔截器


    <?xml version="1.0" encoding="UTF-8"?>
    <beans
    xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context
    ="http://www.springframework.org/schema/context"
        xmlns:aop
    ="http://www.springframework.org/schema/aop"
       
    xsi:schemaLocation
    ="http://www.springframework.org/schema/beans

              
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
              
    http://www.springframework.org/schema/context
              
    http://www.springframework.org/schema/context/spring-context-2.5.xsd
              
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
    >

       
    <bean
    id="sessionFactory" 
                class
    ="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 

           
    <property name="configLocation" value="classpath:hibernate.cfg.xml" /> 

           
    <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
       
    </bean> 


       
    <!-- 定義事務管理器(聲明式的事務) --> 

       
    <bean id="transactionManager"
            class
    ="org.springframework.orm.hibernate3.HibernateTransactionManager">
           
    <property name="sessionFactory" ref="sessionFactory" />
       
    </bean>
      

       
    <bean id="transactionInterceptor" 
            class
    ="org.springframework.transaction.interceptor.TransactionInterceptor"> 

           
    <property name="transactionManager" ref="transactionManager" /> 

           
    <!-- 配置事務屬性 --> 

           
    <property name="transactionAttributes"> 

               
    <props> 

                   
    <prop key="*">PROPAGATION_REQUIRED</prop> 

               
    </props> 

           
    </property> 
       
    </bean>
         

       
    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> 

           
    <property name="beanNames"> 

               
    <list> 

                   
    <value>*Dao</value>
               
    </list> 

           
    </property> 

           
    <property name="interceptorNames"> 

               
    <list> 

                   
    <value>transactionInterceptor</value> 

               
    </list> 

           
    </property> 
       
    </bean> 
     

       
    <!-- 配置DAO -->
       
    <bean id="userDao"
    class
    ="com.bluesky.spring.dao.UserDaoImpl">
           
    <property name="sessionFactory" ref="sessionFactory" />
       
    </bean>
    </beans>

    第四種方式:使用tx標簽配置的攔截器


    <?xml version="1.0" encoding="UTF-8"?>
    <beans
    xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context
    ="http://www.springframework.org/schema/context"
        xmlns:aop
    ="http://www.springframework.org/schema/aop"
        xmlns:tx
    ="http://www.springframework.org/schema/tx"
        xsi:schemaLocation
    ="http://www.springframework.org/schema/beans

              

    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
              
    http://www.springframework.org/schema/context
              
    http://www.springframework.org/schema/context/spring-context-2.5.xsd
              
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
              
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
    >

       
    <context:annotation-config />
       
    <context:component-scan base-package="com.bluesky" />

       
    <bean
    id="sessionFactory" 
                class
    ="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 

           
    <property name="configLocation" value="classpath:hibernate.cfg.xml" /> 

           
    <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
       
    </bean> 


       
    <!-- 定義事務管理器(聲明式的事務) --> 

       
    <bean id="transactionManager"
            class
    ="org.springframework.orm.hibernate3.HibernateTransactionManager">
           
    <property name="sessionFactory" ref="sessionFactory" />
       
    </bean>

       
    <tx:advice id="txAdvice"
    transaction-manager
    ="transactionManager">
           
    <tx:attributes>
               
    <tx:method name="*"
    propagation
    ="REQUIRED" />
           
    </tx:attributes>
       
    </tx:advice>
       

       
    <aop:config>
           
    <aop:pointcut id="interceptorPointCuts"
                expression
    ="execution(*
    com.bluesky.spring.dao.*.*(..))"
    />
           
    <aop:advisor advice-ref="txAdvice"
                pointcut-ref
    ="interceptorPointCuts" />       

       
    </aop:config>     

    </beans>

    第五種方式:全注解


    <?xml version="1.0" encoding="UTF-8"?>
    <beans
    xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context
    ="http://www.springframework.org/schema/context"
        xmlns:aop
    ="http://www.springframework.org/schema/aop"
        xmlns:tx
    ="http://www.springframework.org/schema/tx"
        xsi:schemaLocation
    ="http://www.springframework.org/schema/beans

              
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
              
    http://www.springframework.org/schema/context
              
    http://www.springframework.org/schema/context/spring-context-2.5.xsd
              
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
              
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
    >

       
    <context:annotation-config />
       
    <context:component-scan base-package="com.bluesky" />

       
    <tx:annotation-driven transaction-manager="transactionManager"/>

       
    <bean
    id="sessionFactory" 
                class
    ="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 

           
    <property name="configLocation" value="classpath:hibernate.cfg.xml" /> 

           
    <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
       
    </bean> 


       
    <!-- 定義事務管理器(聲明式的事務) --> 

       
    <bean id="transactionManager"
            class
    ="org.springframework.orm.hibernate3.HibernateTransactionManager">
           
    <property name="sessionFactory" ref="sessionFactory" />
       
    </bean>
       

    </beans>

    此時在DAO上需加上@Transactional注解,如下:


    package com.bluesky.spring.dao;

    import
    java.util.List;

    import
    org.hibernate.SessionFactory;
    import
    org.springframework.beans.factory.annotation.Autowired;
    import
    org.springframework.orm.hibernate3.support.HibernateDaoSupport;
    import
    org.springframework.stereotype.Component;

    import
    com.bluesky.spring.domain.User;

    @Transactional
    @Component(
    "userDao")
    public class
    UserDaoImpl
    extends HibernateDaoSupport implements
    UserDao {

       
    public List<User>
    listUsers() {
           
    return this.getSession().createQuery("from
    User
    ").list();
        }
       
       
    }
    posted on 2012-11-01 13:50 巴巴搖 閱讀(120) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
     
    Copyright © 巴巴搖 Powered by: 博客園 模板提供:滬江博客
    主站蜘蛛池模板: 爱情岛论坛免费视频| 成人电影在线免费观看| 无人在线直播免费观看| 精品亚洲aⅴ在线观看| 久久久久久久岛国免费播放| 九月丁香婷婷亚洲综合色| a级毛片毛片免费观看久潮| 亚洲精品无码高潮喷水在线| 亚洲第一页在线播放| 久久免费看黄a级毛片| 免费看国产一级片| 亚洲午夜国产精品无卡| 亚洲成年人免费网站| 亚洲a级片在线观看| 女人被男人桶得好爽免费视频 | 四虎影在线永久免费观看| 亚洲AV成人一区二区三区观看| 国产国产成年年人免费看片| 久久精品国产亚洲精品2020| 亚洲国产精品免费观看| 亚洲日韩中文字幕一区| 高清在线亚洲精品国产二区| 中文在线免费看视频| 亚洲国产香蕉碰碰人人| 69成人免费视频无码专区| 黄色网址免费在线| 亚洲AV永久无码精品水牛影视| 91精品免费不卡在线观看| 亚洲国产一区二区三区在线观看| 免费一级毛片在线播放不收费| 久久久精品国产亚洲成人满18免费网站 | 国产亚洲av片在线观看16女人| 一级特黄aa毛片免费观看| 亚洲av永久无码精品天堂久久| 四虎影视永久免费视频观看| 一级有奶水毛片免费看| 亚洲噜噜噜噜噜影院在线播放| 国产一区二区三区无码免费| 久久免费线看线看| 亚洲久热无码av中文字幕 | 亚洲AV无码成H人在线观看|