<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一区二区三区| 免费VA在线观看无码| 亚洲综合伊人久久大杳蕉| 国产一精品一av一免费爽爽| 亚洲AV成人一区二区三区AV| 亚洲一级毛片免费在线观看| 亚洲午夜成激人情在线影院| 处破痛哭A√18成年片免费| 欧洲亚洲综合一区二区三区| 亚洲色欲久久久久综合网| a级毛片免费播放| 成人永久免费福利视频网站| 黄网站色视频免费观看45分钟| 亚洲男人在线无码视频| 黄色片免费在线观看| 亚洲精品电影天堂网| 永久黄网站色视频免费| 4444亚洲国产成人精品| a级毛片视频免费观看| 亚洲精品免费在线视频| 日韩精品无码人妻免费视频| 免费无码又爽又黄又刺激网站| 国产成人精品日本亚洲专区61| 91人人区免费区人人| 亚洲精品国产国语| 久久亚洲AV永久无码精品| 2021精品国产品免费观看| 亚洲人成电影网站免费| 日韩va亚洲va欧洲va国产| 免费可以在线看A∨网站| 一级毛片在线播放免费| 亚洲人成人77777网站不卡| 亚洲精品456播放|