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

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

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

    學(xué)習(xí)園地

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

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

        總結(jié)如下:

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

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

        具體如下圖:

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

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

        第一種方式:每個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>  

        
    <!-- 定義事務(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共享一個代理基類

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

    此時在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 丘比特 閱讀(109) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 2019中文字幕在线电影免费 | 亚洲国产高清视频在线观看| 国产亚洲精品无码成人| av在线亚洲欧洲日产一区二区| 四虎永久免费地址在线观看| 99热精品在线免费观看| 日韩毛片一区视频免费| 久久精品国产亚洲av品善| 久久亚洲中文无码咪咪爱| 日韩在线视频免费| 韩国免费A级毛片久久| 99免费精品视频| 日韩免费视频一区二区| 最近中文字幕完整免费视频ww| 18女人水真多免费高清毛片| 日韩免费一区二区三区在线| 两个人的视频高清在线观看免费| 毛片视频免费观看| 精品国产免费观看一区| 亚洲国产精品综合久久网络| 亚洲人成中文字幕在线观看| 久久亚洲精精品中文字幕| 精品亚洲成A人无码成A在线观看| 亚洲日产乱码一二三区别| 一个人看的www视频免费在线观看| 99久久99这里只有免费的精品 | 亚洲精品宾馆在线精品酒店| 曰批全过程免费视频免费看| 97在线免费观看视频| 91精品成人免费国产片| 日韩激情无码免费毛片| 亚洲男人第一无码aⅴ网站| 亚洲大尺度无码专区尤物| 亚洲国产精品yw在线观看| 亚洲av无码一区二区三区天堂| 永久免费观看黄网站| 91制片厂制作传媒免费版樱花| 妞干网在线免费观看| 91精品视频免费| 国产一精品一aⅴ一免费| 久久精品九九亚洲精品天堂|