`
mudid
  • 浏览: 10879 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

Spring配置事务在DAO层和SERVICE层

阅读更多
【转载自http://www.blogjava.net/hk2000c/archive/2007/11/01/157508.html
【感谢原作者:hk2000c】
Spring通过AOP实现声明式事务管理。通常通过TransactionProxyFactoryBean设置Spring事务代理。我们需要一个目标对象包装在事务代理中。这个目标对象一般是一个普通Java对象的bean。当我们定义TransactionProxyFactoryBean时,必须提供一个相关的 PlatformTransactionManager的引用和事务属性。 事务属性含有上面描述的事务定义。
PlatformTransactionManager:
HibernateTransactionManager需要一个SessionFactory的引用
JtaTransactionManager
一.把事务放置在了DAO层:
<!—hibernateTransactionManager-->
<bean id="transactionManager"
       class="org.springframework.orm.hibernate3.HibernateTransactionManager">
       <property name="sessionFactory">
              <ref local="sessionFactory" />
       </property>
</bean>
<!—DAO层接口实现-->
<bean id="companyDAOTarget"
       class="com.vstsoft.querycompany.dao.impl.CompanyDAOImpl">
       <property name="sessionFactory">
              <ref local="sessionFactory" />
       </property>
</bean>
<!—spring对DAO层的事务代理-->
<bean id="companyDAOProxy"
       class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
       <property name="transactionManager">
              <ref bean="transactionManager" />
       </property>
       <property name="target">
              <ref local="companyDAOTarget" />
       </property>
       <property name="transactionAttributes">
              <props>
              <prop key="insert*">PROPAGATION_REQUIRED</prop>
              <prop key="delete*">PROPAGATION_REQUIRED</prop>
              <prop key="find*">
              PROPAGATION_REQUIRED,readOnly
              </prop>
              </props>
       </property>
</bean>
<!—业务层接口实现,把DAO注入到Service里面-->
<bean name="companyManageTarget"
       class="com.vstsoft.querycompany.service.impl.CompanyManageTarget">
       <property name="companyDAO">
              <ref bean="companyDAOProxy" />
       </property>
</bean>
<!—spring对Service层的代理-->
<bean id="companyManageProxy"
       class="org.springframework.aop.framework.ProxyFactoryBean">
       <property name="proxyInterfaces">
              <value>com.vstsoft.querycompany.service.CompanyManage</value>
       </property>
       <property name="target">
              <ref bean="companyManageTarget" />
       </property>
</bean>
<!—配置struts访问,把service层注入到action里面-->
<bean name="/company"
       class="com.vstsoft.querycompany.web.action.CompanyAction" singleton="false">
       <property name="companyManage">
              <ref local="companyManageProxy" />
       </property>
</bean>


二.把事务放置在了Service层:
<!—jtaTransactionManager-->
<bean id="jtaTransactionManager"
       class="org.springframework.transaction.jta.JtaTransactionManager" />
<!—DAO层接口实现-->
<bean id="companyDAOTarget"
       class="com.vstsoft.querycompany.dao.impl.CompanyDAOImpl">
       <property name="sessionFactory">
              <ref local="sessionFactory" />
       </property>
</bean>
<!—spring对DAO层的代理-->
<bean id="companyDAOProxy"
       class="org.springframework.aop.framework.ProxyFactoryBean">
       <property name="proxyInterfaces">
              <value>com.vstsoft.querycompany.dao.CompanyDAO</value>
       </property>
       <property name="target">
              <ref bean="companyDAOTarget" />
       </property>
</bean>
<!—业务层接口实现,把DAO注入到Service里面-->
<bean name="companyManageTarget"
       class="com.vstsoft.querycompany.service.impl.CompanyManageTarget">
       <property name="companyDAO">
              <ref bean="companyDAOProxy" />
       </property>
</bean>
<!—spring代理业务层的事务管理-->
<bean id="companyManageProxy"
       class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
       <property name="transactionManager">
              <ref local="jtaTransactionManager" />
       </property>
       <property name="transactionAttributes">
              <props>
                     <prop key="set*">PROPAGATION_REQUIRED</prop>
                     <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
              </props>
       </property>
       <property name="target">
              <ref bean="companyManageTarget" />
       </property>
</bean>
<!—配置struts访问,把service层注入到action里面-->
<bean name="/company"
       class="com.vstsoft.querycompany.web.action.CompanyAction" singleton="false">
       <property name="companyManage">
              <ref local="companyManageProxy" />
       </property>
</bean>


例如:在service层的接口实现CompanyManageImpl里面有个setData方法:按顺序执行对数据库的数据查询,数据删除,数据插入数据库,如果哪一步出异常(运行时异常),以上三个操作都将事务回滚。

分享到:
评论

相关推荐

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

    事务简介 二、程序举例环境搭建 o1. 创建数据表 o2....o3....o4. 定义dao接口 o5. 定义dao接口对应的sql映射文件 o6....o7. 定义service接口及实现类 o8....o9.... 业务层 public 方法加入事务属性 o5. 测试

    spring_day01_all.zip_Action!_ioc mechanism_service调用dao

    在SSH整合开发中,利用Spring管理Service、DAO等组件,利用IoC机制实现Action和Service,Service和DAO之间低耦合调用。利用AoP机制实现事务管理、以及共通功能的切入等。 功能是整合,好处是解耦。

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

    前几天搞 Spring + Hibernate + Struts 事务配置 ,网上找了好多资料,不过好无语,大多都是 Ctrl + V,浪费俺的宝贵时间 现在我总结配出一套,给大家参考参考,可能有不足,请大家多多交流。 附:内有弹出...

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

    10.5.1 Spring事务管理器的应对 10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源...

    java大作业基于SSH框架的学生成绩管理系统源码.zip

    java基于SSH框架的学生成绩管理系统源码。要求: (1) 整合Struts2、Spring和Hibernate框架...​ (3) 在Spring配置文件中增加该DAO层实现类的定义,并需要依赖注入一个SessionFactory bean的引用。 7、 开发Service

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

    10.5.1 Spring事务管理器的应对 10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源...

    SSH概要介绍

    6、将applicationContext.xml的事务传播控制器,注解注入service接口实现类,在需要事务的地方,注解配置事务控制。将Dao接口注解注入service接口实现类,接口实现类调用Dao接口,将action所要的操作,传递给Dao接口...

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

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

    spring in action英文版

     6.6.2 在Spring里置入一个Web Service  6.7 小结  第7章 访问企业服务  7.1 从JNDI中获取对象  7.1.1 使用传统的JNDI  7.1.2 代理JNDI对象  7.2 发送电子邮件  7.3 调度任务  7.3.1 使用...

    ssm整合,crm客户管理

    b) SqlSessionFactory对象,需要spring和mybatis整合包下的。 c) 配置mapper文件扫描器。Mapper动态代理开发 增强版 Service层: 1、applicationContext-service.xml包扫描器,扫描@service注解的类。 2、...

    springMVC+Spring+Mybatis+Maven整合代码案例

    4、搭建spring和mybatis的配置:spring-mybatis.xm(扫描dao)) 5、测试Spring+mybatis的框架搭建,写单元测试JUnit,测试事务配置等:model--&gt;dao(mapper)--&gt;service--&gt;test 6、映入SpringMVC:配置...

    springMVC + Hibernate 工程模板

    spring配置式事务管理(jdk动态代理,每个service必须对应一个接口) BaseService里注入BaseDao 和transactionTemplate(用于编程式事务处理,只用于特殊需要,因为已经存在配置式事务,一般符合命名的方法会自动...

    Spring中文帮助文档

    2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. 对Websphere 事务管理的完整支持 2.4.3. JPA 2.4.4. 异步的JMS 2.4.5. JDBC 2.5. Web层 2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于...

    Spring API

    2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. 对Websphere 事务管理的完整支持 2.4.3. JPA 2.4.4. 异步的JMS 2.4.5. JDBC 2.5. Web层 2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于...

    Spring.html

    Repository:dao层 管理对象 注入 AutoWired Qualifier Resource Value 声明周期 Scope PostConstruct PreDestroy 新注解 Bean:写方法上,将方法的返回值 Configuration:标记配置类 ...

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

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

    Struts2.1Spring2.5IBatisJQuery框架

    3) 利用Spring的@Service、@Repository两个Annotation来实现Service类、DAO类在Spring容器中的自动注册,利用@Autowired来实现Service与其他对象的引用。 通过框架提供的以上组件,除了基本的配置,如数据源、事务等...

    spring项目开发学习笔记

    容器(spring):管理dao,service,action,...包含并管理应用对象的生命周期和配置 框架:使用组件配置组合成复杂的应用,并提供很多基础功能 Spring提供了对开源社区中很多框架及JavaEE中很多技术的支持,让程序员很...

    Organic水果蔬菜商城

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

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

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

Global site tag (gtag.js) - Google Analytics