Spring在SERVICE层(业务层)配备事务

Spring在SERVICE层(业务层)配置事务
版本:spring2+hibernate3+struts2

Spring配置事务在SERVICE层
applicationContext.xml文件内容:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> 
 
 
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
        <property name="driverClassName" value="com.mysql.jdbc.Driver"> 
        </property> 
        <property name="url" value="jdbc:postgresql://localhost::3306/test"> 
        </property> 
        <property name="username" value="test"></property> 
        <property name="password" value="123"></property> 
    </bean> 
 
    <!-- 把数据源注入给Session工厂 --> 
    <bean id="sessionFactory" 
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
        <property name="dataSource"> 
            <ref bean="dataSource" /> 
        </property> 
        <property name="configLocations"> 
            <list> 
                <value> 
                    classpath:hibernate.cfg.xml 
                </value> 
            </list> 
        </property> 
    </bean> 
 
    <!-- hibernateTransactionManager--> 
    <bean id="transactionManager" 
        class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
        <property name="sessionFactory"> 
            <ref bean="sessionFactory" /> 
        </property> 
    </bean> 
 
    <!-- DAO层接口实现--> 
    <bean id="userDAO" class="com.goodhope.dao.impl.UserDaoImpl"> 
        <property name="sessionFactory"> 
            <ref bean="sessionFactory" /> 
        </property> 
    </bean> 
 
    <!--业务层接口实现,把DAO注入到Service里面--> 
    <bean id="userServiceTarget" class="com.goodhope.service.impl.UserServiceImpl"> 
        <property name="userDAO"> 
            <ref bean="userDAO" /> 
        </property> 
    </bean> 
 
    <!--spring代理业务层的事务管理基类--> 
    <bean id="serviceProxy" 
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true"> 
        <property name="transactionManager"> 
            <ref local="transactionManager" /> 
        </property> 
        <property name="transactionAttributes"> 
            <props> 
                <prop key="save*">PROPAGATION_REQUIRED</prop>
                <prop key="delete*">PROPAGATION_REQUIRED</prop>
                <prop key="update*">PROPAGATION_REQUIRED</prop>
                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
            </props> 
        </property>  
    </bean> 

 <!--spring代理业务层的事务管理-->
   <bean id="userService"  parent="serviceProxy" >
        <property name="target"> 
            <ref bean="userServiceTarget" /> 
        </property>
    </bean>


    <!--配置struts访问,把service层注入到action里面--> 
    <bean id="userAction" class="com.goodhope.action.UserAction" 
        scope="prototype"> 
        <property name="userService"> 
            <ref bean="userServiceProxy" /> 
        </property> 
    </bean> 
</beans> 


Spring配置事务在DAO层!!!
applicationContext.xml文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

    <!-- 配置数据源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="org.postgresql.Driver">
        </property>
        <property name="url" value="jdbc:postgresql://localhost:5432/sylvia">
        </property>
        <property name="username" value="duan.sixin"></property>
        <property name="password" value="goodhope"></property>
    </bean>

    <!-- 把数据源注入给Session工厂 -->
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
        <property name="configLocations">
            <list>
                <value>
                    classpath:hibernate.cfg.xml
                </value>
            </list>
        </property>
    </bean>

    <!-- hibernateTransactionManager-->
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref bean="sessionFactory" />
        </property>
    </bean>

    <!-- DAO层接口实现-->
    <bean id="userDAOTarget" class="com.goodhope.dao.impl.UserDaoImpl">
        <property name="sessionFactory">
            <ref bean="sessionFactory" />
        </property>
    </bean>

    <!--spring对DAO层的事务代理-->
    <bean id="userDAOProxy"
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager">
            <ref bean="transactionManager" />
        </property>
        <property name="target">
            <ref local="userDAOTarget" />
        </property>
        <property name="transactionAttributes">
            <props>
                <prop key="save*">PROPAGATION_REQUIRED</prop>
                <prop key="delete*">PROPAGATION_REQUIRED</prop>
                <prop key="update*">PROPAGATION_REQUIRED</prop>
                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
            </props>
        </property>

    </bean>

    <!--service层接口实现,把DAO注入到Service里面-->
    <bean id="userServiceTarget" class="com.goodhope.service.impl.UserServiceImpl">
        <property name="userDao">
            <ref bean="userDAOProxy" />
        </property>
    </bean>

    <!--spring对service层的代理-->
    <bean id="userServiceProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
        <property name="proxyInterfaces">
            <list>
                <value>
                    com.goodhope.service.UserService
                </value>
            </list>
        </property>
        <property name="target">
            <ref bean="userServiceTarget" />
        </property>
    </bean>

    <!--配置struts访问,把service层注入到action里面-->
    <bean id="userAction" class="com.goodhope.action.UserAction"
        scope="prototype">
        <property name="userService">
            <ref bean="userServiceProxy" />
        </property>
    </bean>
</beans>



本文来自****博客,转载请标明出处:http://blog.****.net/yao_2008/archive/2010/03/15/5383324.aspx