`

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

    博客分类:
  • java
阅读更多
版本: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>



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yao_2008/archive/2010/03/15/5383324.aspx
分享到:
评论

相关推荐

    Spring事务优缺点及使用详解.docx

    事务简介 二、程序举例环境搭建 o1. 创建数据表 o2....o3....o4....o5....o6....o7. 定义service接口及实现类 o8....o9. Spring配置文件 o10....三、使用 Spring 的事务注解管理事务 ... 业务层 public 方法加入事务属性 o5. 测试

    Spring + Hibernate + Struts 事务配置小例子(带提示框等小技巧)

    -- 配置事务管理器 --&gt; class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt; &lt;!-- 配置事务拦截器--&gt; class="org.springframework.transaction.interceptor....

    Spring.3.x企业应用开发实战(完整版).part2

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能...附录B 在Spring中开发Web Service

    OA系统整体设计及约定、搭建环境.rar_OA系统及配置_OA系统整体设计及约定、搭建环境_creation

    我们一般不会在dao层使用transaction,事务被配置在service层上更为合理,因为业务层方法表示逻辑上的一个原子操作。在这种环境下,如果你遇到上述异常,请考虑一下service层上没有配置transaction,transaction有...

    spring in action英文版

    第二部分 Spring在业务层的应用  第4章 征服数据库  4.1 学习Spring的DAO理念  4.1.1 理解Spring的DataAccessException  4.1.2 与DataSource一起工作  4.1.3 一致的DAO支持  4.2 在Spring中使用...

    Spring.html

    概念:面向切面编程,在不改变源码的情况下对方法进行增强,抽取横切关注点(日志处理,事务管理,安全检查,性能测试等等),使用AOP进行增强,使程序员只需要关注与业务逻辑编写. 专业术语 目标Target:需要增强的类 ...

    spring.net中文手册在线版

    业务层 29.3.2.服务层 29.3.3.Web层 29.4.总结 第三十章. 数据访问快速入门 30.1.简介 第三十一章. 事务管理快速入门 31.1.简介 31.2.应用程序概述 31.2.1.接口 第七部分. Java开发人员必读 第三十二章. Java开发...

    Spring3.x企业应用开发实战(完整版) part1

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能...附录B 在Spring中开发Web Service

    《精通Spring2.X企业应用开发详解》随书源码1-15章

    使用JPA访问数据库 第12章 整合其他ORM框架 第4篇 业务层应用 第13章 任务调度和异步执行器 第14章 JavaMail发送邮件 第15章 在Spring中使用JMS 第16章 在Spring中开发Web Service 第17章 使用...

    Spring3.x_Struts2.x_Hibernate3.x整合之声明式事务配置

    但是通常都会在Service中来处理多个业务逻辑的关系,如:删除,更新等,此时如果在执行了一个步骤之后抛出抛出异常就会导致数据部完整,所以事务不应该在Dao中处理,而应该在Service中处理,这也是就是Spring提供的...

    《精通Spring2.X企业应用开发详解》16-19章

    使用JPA访问数据库 第12章 整合其他ORM框架 第4篇 业务层应用 第13章 任务调度和异步执行器 第14章 JavaMail发送邮件 第15章 在Spring中使用JMS 第16章 在Spring中开发Web Service 第17章 使用...

    《精通Spring2.X企业应用开发详解》20-23

    使用JPA访问数据库 第12章 整合其他ORM框架 第4篇 业务层应用 第13章 任务调度和异步执行器 第14章 JavaMail发送邮件 第15章 在Spring中使用JMS 第16章 在Spring中开发Web Service 第17章 使用...

    Organic水果蔬菜商城

    准备资料: 前端静态页面图片等 1.根据前端页面进行数据库分析设计 1.1设计实体类及其属性 1.2设计实体类间关系 2.搭建SSM开发环境 ...3.2Service层(对于增删改进行事务处理) 3.3Dao层(包括MyBatis映射文件)

    基于SSM构建的留言板+源代码+文档说明

    使用配置的方式将Service接口配置在Spring的配置文件中 实现事务控制 #### 整合SpringMVC 因为SpringMVC是Spring的一个模块,不需要专门的设置 如何给包、文件、函数命名? - 每个额外的命名必须传递信息 - 尽量...

    Web框架编程-SSM框架整合

    SSM框架整合是将Spring、Spring MVC和...在Service层和Controller层编写代码,处理业务逻辑和接收请求,并通过部署和启动服务器进行测试。整合SSM框架可以提高开发效率,简化代码开发,实现可靠的数据库连接和操作。

    spring项目开发学习笔记

    AOP面向切面编程:(可以在不修改源代码的前提下,增强权限,日志,事务功能)切面编程将业务逻辑从应用服务中分离 容器(spring):管理dao,service,action,...包含并管理应用对象的生命周期和配置 框架:使用组件配置...

    基于java实现仿京东商城电商系统项目设计与实现源码分享

    Spring:业务层,管理service,dao,工具类对象;依赖注入来管理各层,面向切面编程管理事务,日志和权限 MyBatis:持久层;访问数据库;基于jdbc的框架,主要用来操作数据库,并且将业务实体和数据表联系起来 1、...

    基于java实现仿京东商城电商系统项目设计与实现源码

    Spring:业务层,管理service,dao,工具类对象;依赖注入来管理各层,面向切面编程管理事务,日志和权限 MyBatis:持久层;访问数据库;基于jdbc的框架,主要用来操作数据库,并且将业务实体和数据表联系起来 1、...

    基于java实现大学生求职就业网项目设计源码分享

    Spring:业务层,管理service,dao,工具类对象;依赖注入来管理各层,面向切面编程管理事务,日志和权限 MyBatis:持久层;访问数据库;基于jdbc的框架,主要用来操作数据库,并且将业务实体和数据表联系起来 1、...

    基于java实现大学生求职就业网项目设计源码

    Spring:业务层,管理service,dao,工具类对象;依赖注入来管理各层,面向切面编程管理事务,日志和权限 MyBatis:持久层;访问数据库;基于jdbc的框架,主要用来操作数据库,并且将业务实体和数据表联系起来 1、...

Global site tag (gtag.js) - Google Analytics