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

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

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

    paulwong

    Spring事務配置的五種方式

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

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

    具體如下圖:

    根據代理機制的不同,總結了五種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 2011-11-08 23:14 paulwong 閱讀(505) 評論(0)  編輯  收藏 所屬分類: SPRING

    主站蜘蛛池模板: 亚洲国产精品自产在线播放| 亚洲精品无码久久久久秋霞| 国产成人在线观看免费网站| 成人性生交大片免费看中文| 亚洲av成人无码网站…| 亚洲手机中文字幕| 国产AV日韩A∨亚洲AV电影| 亚洲免费在线观看视频| 亚洲AV无码久久精品狠狠爱浪潮| 一级毛片直播亚洲| 午夜免费不卡毛片完整版| 猫咪免费人成网站在线观看| 9i9精品国产免费久久| 男女超爽视频免费播放| 亚洲日韩精品无码专区加勒比☆ | 亚洲av乱码一区二区三区| 亚洲成在人线av| 在线观看亚洲精品国产| 免费人成网站在线播放| 国产精品麻豆免费版| 午夜神器成在线人成在线人免费| 蜜桃AV无码免费看永久| 无码少妇精品一区二区免费动态| 巨胸喷奶水www永久免费| 日韩一级片免费观看| 免费大片av手机看片| 男女猛烈xx00免费视频试看| 亚洲av无码日韩av无码网站冲 | 18未年禁止免费观看| 四虎影视在线影院在线观看免费视频 | 久久精品国产亚洲AV电影网| 亚洲男人的天堂网站| 99亚偷拍自图区亚洲| 亚洲中文字幕无码中文字| 亚洲jjzzjjzz在线播放| 亚洲av产在线精品亚洲第一站| youjizz亚洲| 亚洲国产成人久久精品软件 | 免费无码看av的网站| 四虎成人免费网站在线| 国产一级淫片a免费播放口之 |