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

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

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

    一杯清茶

    統(tǒng)計

    留言簿

    Oracle SQL/PLSQL

    PowerDesigner教程系列

    Struts2.0

    web開發(fā)

    三人行

    從事RCP開發(fā)的同行

    工作流和權限設置

    閱讀排行榜

    評論排行榜

    Spring事務配置的五種方式

    轉自:http://www.tkk7.com/robbie/archive/2009/04/05/264003.html

            前段時間對Spring的事務配置做了比較深入的研究,在此之間對Spring的事務配置雖說也配置過,但是一直沒有一個清楚的認識。通過這次的學習發(fā)覺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 2010-04-27 14:19 一杯清茶 閱讀(264) 評論(0)  編輯  收藏 所屬分類: Spring

    主站蜘蛛池模板: 久久精品国产精品亚洲蜜月| 又大又硬又爽免费视频| 18成禁人视频免费网站| 久热中文字幕在线精品免费| 成人a免费α片在线视频网站| 超清首页国产亚洲丝袜| 亚洲视频一区二区| 亚洲国产成人一区二区精品区| 2021精品国产品免费观看| 久久精品国产亚洲AV果冻传媒| 亚洲色图综合网站| 麻豆亚洲AV成人无码久久精品| 亚洲a在线视频视频| 亚洲综合av一区二区三区| 亚洲精品色在线网站| 亚洲 无码 在线 专区| 亚洲一区二区三区日本久久九| 久久亚洲国产视频| 日本免费在线观看| 日本特黄特色aa大片免费| 亚洲人成色77777| 亚洲中文字幕久久精品无码VA| 中文精品人人永久免费| 人禽杂交18禁网站免费| 中文字幕一精品亚洲无线一区| 在线亚洲97se亚洲综合在线| ssswww日本免费网站片| 天天摸夜夜摸成人免费视频 | 亚洲第一永久在线观看| 在线观看亚洲AV日韩AV| 国产成人高清精品免费软件 | 中文在线免费看视频| 成年女人喷潮毛片免费播放| 亚洲另类激情综合偷自拍| 国产黄在线播放免费观看| 久久久亚洲欧洲日产国码aⅴ | 亚洲国产一区视频| 亚洲精品无AMM毛片| 久久久久久精品免费看SSS | 国产亚洲欧洲Aⅴ综合一区| 5555在线播放免费播放|