<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ù)配置總是由三個(gè)組成部分,分別是DataSource、TransactionManager和代理機(jī)制這三部分,無(wú)論哪種配置方式,一般變化的只是代理機(jī)制這部分。

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

    具體如下圖:

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

    第一種方式:每個(gè)Bean都有一個(gè)代理
    <? 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共享一個(gè)代理基類(lèi)

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


    此時(shí)在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) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): SPRING

    主站蜘蛛池模板: 91免费资源网站入口| 久久亚洲国产精品一区二区| 亚洲av乱码一区二区三区| 精品一区二区三区免费| 精品国产亚洲一区二区在线观看 | 伊人久久亚洲综合影院首页| 最近2018中文字幕免费视频| 亚洲国产精品特色大片观看完整版| 特级做a爰片毛片免费看| 在线永久免费观看黄网站| 亚洲xxxxxx| AV无码免费永久在线观看| 亚洲小视频在线观看| 国产99视频精品免费专区| 国产亚洲一区二区三区在线观看 | 久久久久久精品免费看SSS| 亚洲AV无码国产精品色午友在线| 精品人妻系列无码人妻免费视频 | 免费播放在线日本感人片| 国产AV无码专区亚洲AV漫画 | 免费91麻豆精品国产自产在线观看 | 三年片在线观看免费大全| 亚洲毛片免费观看| 1000部夫妻午夜免费| 亚洲乱亚洲乱淫久久| 亚洲一区免费观看| 久久亚洲精品成人AV| 99久久人妻精品免费一区| 日木av无码专区亚洲av毛片| 91精品国产免费久久国语蜜臀 | 亚洲精品蜜桃久久久久久| 久久精品成人免费看| 久久亚洲精品成人综合| 嫩草在线视频www免费观看| 亚洲av片劲爆在线观看| 99爱免费观看视频在线| 亚洲成人免费网址| 免费无码AV电影在线观看| 亚洲精品久久久久无码AV片软件| 日本视频免费在线| 免费看内射乌克兰女|