- 浏览: 315719 次
- 性别:
- 来自: 辽宁鞍山
文章分类
最新评论
-
linghuan:
[flash=200,200][url][img][list] ...
Spring MVC常用的注解 -
springmvc_springjpa:
spring mvc demo教程源代码下载,地址:http: ...
Spring MVC常用的注解 -
TremBear:
Spring MVC常用的注解 -
evening_xxxy:
...
Spring MVC常用的注解 -
xiao_xu_zi:
System.out.printn("" ...
Spring MVC常用的注解
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>
- <!—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>
<!—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>
- <!—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>
<!—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配置事务在DAO层和业务逻辑层 #### 一、Spring事务管理概述 Spring框架提供了两种事务管理方式:编程式事务管理和声明式事务管理。其中,声明式事务管理是通过配置来完成的,它利用Spring AOP特性,将...
### Spring配置在DAO和事务层知识点详解 #### 一、Spring框架中的事务管理机制 Spring 框架提供了强大的事务管理功能,支持多种事务管理方式,包括编程式事务管理和声明式事务管理。其中,声明式事务管理是通过...
- **Spring**:用于Service层和DAO层,提供依赖管理和事务管理等功能。 - **Hibernate**:用于DAO层,负责对象关系映射(ORM),使得Java对象能够与数据库表相对应。 3. **配置文件**:配置文件是Spring框架中的...
下面将详细介绍这五种Spring事务配置方式。 1. **基于接口的事务代理(TransactionProxyFactoryBean)** 在第一种配置方式中,每个Bean都有一个单独的代理。首先,我们配置DataSource(如SessionFactory)和...
除了Web层之外,Spring 3还提供了针对数据访问层(DAO)和服务层(Service)的注解支持。 ##### 1. 数据访问层(DAO) 在数据访问层,通常会使用`@Repository`注解来标注DAO类。这不仅有助于标识该类的作用域,还...
### Spring事务与数据库操作 #### 一、Spring的声明式事务管理 在现代软件开发中,事务处理是非常关键的一部分,特别是在涉及多个数据操作时。Spring框架提供了强大的事务管理能力,可以方便地集成到应用程序中。...
标题 "自动生成DAO和服务层代码" 指的是在软件开发过程中使用自动化工具来快速创建数据访问对象(DAO)和业务服务层(Service)的代码。这种做法可以显著提高开发效率,减少手动编写重复代码的时间,使开发者能够更...
总之,Spring Boot通过其强大的自动配置和依赖注入机制,使得在IDEA中实例化和使用DAO层变得非常简单。开发者只需要关注业务逻辑,而无需过多关注底层的数据访问细节。这大大提高了开发效率,也使得代码更加模块化和...
本文将详细解析Spring事务配置的多种方法,包括XML配置和注解方式。 首先,理解Spring事务配置的基本组件至关重要。这些组件主要包括: 1. **DataSource**:数据源,它是连接数据库的桥梁,负责管理与数据库的连接...
Spring框架在处理事务时提供了五种不同的配置方式,这些配置主要涉及到事务的声明式管理和编程式管理。在Spring中,事务管理通常分为三部分:...在实际应用中,应根据项目需求和性能考虑选择合适的事务配置方式。
Spring 事务配置是Spring 框架中的重要组成部分,它提供了对数据库操作事务性的管理,确保数据的一致性和完整性。Spring 提供了多种方式来配置事务管理,主要分为编程式事务管理和声明式事务管理。下面将详细介绍这...
### Spring事务配置的五种方式详解 在Spring框架中,事务管理是其核心特性之一,提供了灵活且强大的事务处理机制。对于不同的应用需求,Spring支持多种事务配置方式,旨在简化开发流程并增强代码的可维护性。本文将...
在本项目中,注解将被用来声明和配置DAO和服务类。例如,`@Repository`用于标记DAO接口,`@Service`用于标记业务层的服务类,而`@Autowired`则用于自动装配依赖。此外,`@Transactional`注解可以用来标记需要进行...
在整个过程中,Spring管理的Service和DAO层可以无缝协作,提供高效的数据访问服务。 总结来说,"Struts2+hibernate+spring整合泛型DAO"是一种常见的Java Web开发模式,它利用三大框架的优势,结合泛型设计,提高了...
导致 `org.springframework.dao.InvalidDataAccessApiUsageException` 的主要原因是Spring事务管理器默认将事务设置为只读模式。这意味着,在默认情况下,Spring假设任何被事务管理的方法都是只进行读取操作而不涉及...
### Spring 事务配置的五种方法详解 #### 一、引言 在现代软件开发过程中,事务处理是一项至关重要的技术,特别是在涉及数据库操作时。Spring 框架提供了丰富的事务管理功能,支持多种不同的配置方式来满足不同...
Spring事务配置的五种方式 Spring框架中事务配置是非常重要的一部分,通常由三个组成部分组成,即DataSource、TransactionManager和代理机制。无论采取何种配置方式,代理机制部分总是变化的,而DataSource和...
综上所述,Spring 2.x的声明式事务配置模板主要由`applicationContext.xml`中的事务管理器配置和注解驱动的事务管理两部分组成,结合`@Transactional`注解在业务逻辑中的使用,可以实现自动化、高效且易于维护的事务...