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

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

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

    paulwong

    Spring事務(wù)配置的五種方式

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

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

    具體如下圖:

    根據(jù)代理機(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 2011-11-08 23:14 paulwong 閱讀(496) 評論(0)  編輯  收藏 所屬分類: SPRING

    主站蜘蛛池模板: 免费看大黄高清网站视频在线| 亚洲五月午夜免费在线视频| 亚洲在成人网在线看| 99精品免费视品| 国产福利电影一区二区三区,亚洲国模精品一区 | 亚洲av无码一区二区三区天堂| 日韩视频在线精品视频免费观看 | 中国黄色免费网站| 亚洲男人第一无码aⅴ网站| 直接进入免费看黄的网站| 最近中文字幕无吗高清免费视频| 亚洲国产精品综合久久2007| 久久免费的精品国产V∧| 亚洲AV无码专区国产乱码4SE| 巨胸喷奶水视频www免费视频| 亚洲熟妇少妇任你躁在线观看无码| 直接进入免费看黄的网站| 国产传媒在线观看视频免费观看 | 亚洲中文字幕第一页在线| 人禽伦免费交视频播放| 亚洲精品第一国产综合境外资源| 羞羞漫画小舞被黄漫免费| 免费萌白酱国产一区二区| 美女黄频a美女大全免费皮| 四虎AV永久在线精品免费观看| 羞羞的视频在线免费观看| 日韩亚洲国产综合久久久| 青青草97国产精品免费观看| 亚洲国产婷婷综合在线精品 | 亚洲狠狠婷婷综合久久| 永久免费看mv网站入口| 男女猛烈xx00免费视频试看| 免费一级特黄特色大片在线 | 亚洲综合激情九月婷婷| 国产成人免费在线| 亚洲AV成人噜噜无码网站| 成人片黄网站色大片免费| 亚洲AV无码精品国产成人| 四虎永久免费观看| 国产精品成人69XXX免费视频| 亚洲精品无码国产|