<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 閱讀(496) 評論(0)  編輯  收藏 所屬分類: SPRING

    主站蜘蛛池模板: 免费国产黄网站在线看| 美女被cao网站免费看在线看| 亚洲av无码不卡| 日韩免费一区二区三区| 99精品免费观看| 高潮毛片无遮挡高清免费视频| 亚洲午夜无码久久久久小说| 日韩精品亚洲aⅴ在线影院| 日韩视频免费一区二区三区| 亚洲视频在线观看免费视频| 好湿好大好紧好爽免费视频| 日本亚洲中午字幕乱码| 亚洲AV男人的天堂在线观看| 亚洲成在人天堂在线| 日本高清免费观看| 岛国岛国免费V片在线观看| 亚洲1区2区3区精华液| 亚洲熟妇久久精品| 日本亚洲精品色婷婷在线影院| 337p日本欧洲亚洲大胆艺术| 亚洲第一中文字幕| 亚洲av福利无码无一区二区| 亚洲国产精品无码专区| 亚洲永久无码3D动漫一区| 亚洲精品无码久久久| 亚洲va中文字幕无码| 亚洲国产日韩在线观频| 亚洲精品456播放| 日韩亚洲国产二区| 在线a亚洲v天堂网2018| 亚洲av无码成人精品区在线播放 | 无码AV片在线观看免费| a视频在线免费观看| 999zyz**站免费毛片| 18禁超污无遮挡无码免费网站| 中文字幕无码免费久久9一区9| 男女拍拍拍免费视频网站| 一区二区免费国产在线观看| 亚洲阿v天堂在线2017免费| eeuss影院免费92242部| 黄视频在线观看免费|