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

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

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

    學習園地

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      3 Posts :: 14 Stories :: 0 Comments :: 0 Trackbacks

    前段時間對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 2014-03-26 10:55 丘比特 閱讀(108) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 久久精品免费全国观看国产| 两个人看的www免费高清 | 2020因为爱你带字幕免费观看全集 | 一级毛片人与动免费观看| 国产精品公开免费视频| 99热亚洲色精品国产88| 精品亚洲视频在线观看| 亚洲中文字幕无码中文| 69天堂人成无码麻豆免费视频| 亚洲午夜国产精品无码| 皇色在线免费视频| 四虎永久在线精品免费影视| 亚洲欧美国产欧美色欲| 一二三四免费观看在线电影| 亚洲系列国产精品制服丝袜第| 久99久精品免费视频热77| 亚洲精品无码久久久久| 国产特黄一级一片免费| 国产精品亚洲w码日韩中文| 色老头综合免费视频| 亚洲精品第一国产综合精品99| 污污视频免费观看网站| 日本久久久免费高清| 亚洲中文字幕无码av永久| 成年人视频在线观看免费| 亚洲成a人片在线不卡一二三区 | 久久久久亚洲国产| 午夜神器成在线人成在线人免费 | 久久亚洲一区二区| 两个人看的www免费视频| 亚洲真人日本在线| 国产亚洲精品欧洲在线观看| 日韩免费a级毛片无码a∨| 亚洲伊人久久精品| 美女视频黄的全免费视频网站| 99ri精品国产亚洲| 91九色老熟女免费资源站 | 亚洲第一第二第三第四第五第六| 日韩免费观看的一级毛片| 国产亚洲精品国产福利在线观看| 亚洲精品国产V片在线观看|