<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
    統(tǒng)計(jì)
    • 隨筆 - 0
    • 文章 - 4
    • 評(píng)論 - 0
    • 引用 - 0

    導(dǎo)航

    留言簿

    文章檔案

    搜索

    •  

    最新評(píng)論

     

       
    前段時(shí)間對(duì)Spring的事務(wù)配置做了比較深入的研究,在此之間對(duì)Spring的事務(wù)配置雖說(shuō)也配置過(guò),但是一直沒(méi)有一個(gè)清楚的認(rèn)識(shí)。通過(guò)這次的學(xué)習(xí)發(fā)覺(jué)Spring的事務(wù)配置只要把思路理清,還是比較好掌握的。


        總結(jié)如下:


       
    Spring配置文件中關(guān)于事務(wù)配置總是由三個(gè)組成部分,分別是DataSource、TransactionManager和代理機(jī)制這三部分,無(wú)論哪種配置方式,一般變化的只是代理機(jī)制這部分。


       
    DataSource、TransactionManager這兩部分只是會(huì)根據(jù)數(shù)據(jù)訪問(wèn)方式有所變化,比如使用Hibernate進(jìn)行數(shù)據(jù)訪問(wèn)時(shí),DataSource實(shí)際為SessionFactory,TransactionManager的實(shí)現(xiàn)為HibernateTransactionManager。


        具體如下圖:


    Spring事務(wù)配置 (2)


        根據(jù)代理機(jī)制的不同,總結(jié)了五種Spring事務(wù)的配置方式,配置文件如下:


        第一種方式:每個(gè)Bean都有一個(gè)代理


    <?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> 


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

       
    <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"> 

              
    <!-- 配置事務(wù)管理器 --> 

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

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

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

               
    <props> 

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

           
    </property> 
       
    </bean> 

    </beans>

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


    <?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> 


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

       
    <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"> 

           
    <!-- 配置事務(wù)管理器 --> 

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

           
    <!-- 配置事務(wù)屬性 --> 

           
    <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> 


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

       
    <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" /> 

           
    <!-- 配置事務(wù)屬性 --> 

           
    <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標(biāo)簽配置的攔截器


    <?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> 


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

       
    <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> 


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

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

    </beans>

    此時(shí)在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) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
     
    Copyright © 巴巴搖 Powered by: 博客園 模板提供:滬江博客
    主站蜘蛛池模板: 一区二区三区免费看| 亚洲高清无在码在线电影不卡 | 亚洲AⅤ男人的天堂在线观看| 亚洲第一成人在线| 亚洲一级毛片免观看| 亚洲一区二区影视| 亚洲精品123区在线观看| 亚洲午夜成人精品无码色欲| 亚洲精品无码一区二区| 亚洲精品国产摄像头| 丰满亚洲大尺度无码无码专线| 日韩色视频一区二区三区亚洲| 青青青视频免费观看| 99久久免费国产精精品| 无码A级毛片免费视频内谢| 99国产精品免费观看视频| 国产免费毛不卡片| 天天看免费高清影视| 免费中文字幕在线观看| 亚洲中文字幕无码爆乳AV| 亚洲视频一区调教| 激情综合亚洲色婷婷五月| 午夜亚洲WWW湿好爽| 一区二区三区免费在线视频| a毛片在线看片免费| 久久免费看黄a级毛片| 超pen个人视频国产免费观看| 免费大黄网站在线观| 亚洲中文字幕无码爆乳AV| 亚洲精品第一国产综合精品| 亚洲第一区二区快射影院| 免费无遮挡无码视频在线观看| 中文字幕不卡免费高清视频| 999久久久免费精品播放| 国产资源免费观看| 亚洲色大成网站www永久一区| 亚洲视频免费播放| 最新亚洲人成无码网www电影| 在线涩涩免费观看国产精品| 美女网站免费福利视频| 免费人成视频在线观看不卡|