- 浏览: 180060 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (186)
- Ant (11)
- Axis2 (15)
- Car (9)
- Eclipse (1)
- Java (19)
- Java-EM (4)
- Javascript (11)
- Jsp (1)
- Hibernate (9)
- Mysql (1)
- Ms-Dos (5)
- Music (0)
- Oracle (3)
- Postgresql (0)
- Photoshop (1)
- Spring (17)
- Struts (8)
- Selenium (5)
- Ubuntu (13)
- News (17)
- Others (7)
- SSH (11)
- 算法 (5)
- FreeMarker (4)
- Tomcat (2)
- Linux (5)
最新评论
转自:http://www.blogjava.net/hk2000c/archive/2007/11/01/157508.html
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-hibernate
2008-10-24 21:04 683原则上尽量要使用spring下载包里lib目录里的jar文件 ... -
在项目中为 Spring Framework 配置 Log4j
2008-10-28 19:15 763创建一个基于 Spring Framework 的项目之后,在 ... -
spring2.0以后声明式事务管理
2008-10-29 17:35 810基于注解式的 <?xml version="1 ... -
SpringBeanFactory
2008-10-29 17:38 801SpringBeanFactory import org.sp ... -
用 Hibernate 和 Spring 开发事务持久层(转贴)
2008-10-30 20:20 655用 Hibernate 和 Spring 开发 ... -
基于 MVC 三层架构,Spring 配置文件(08.10.31号)
2008-10-31 11:28 891<?xml version="1.0" ... -
简化Spring(1)--配置文件
2008-10-31 13:53 617转自:http://www.blogjava.net/calv ... -
简化Spring(2)--Model层
2008-10-31 13:54 594简化Spring(2)--Model层 作者:江南白 ... -
简化Spring(3)--Controller层
2008-10-31 13:55 509简化Spring(3)--Controller层 ... -
简化Spring(4)--View层
2008-10-31 13:55 524简化Spring(4)--View层 作者:江南白衣 ... -
Spring--简单使用quartz实现定时作业
2008-10-31 14:14 685Spring--简单使用quartz实现定时作业 ... -
Pathway from ACEGI to Spring Security 2.0
2008-11-20 08:42 721Pathway from ACEGI to Spring Se ... -
Pathway from ACEGI to Spring Security 2.0(2)
2008-11-20 08:55 834The main part of this piece of ... -
Pathway from ACEGI to Spring Security 2.0(3)
2008-11-20 08:56 881OK, so now we have setup the d ... -
spring常见错误之一
2008-12-13 09:32 736Error creating bean with name ' ... -
ApplicationContext.xml
2008-12-02 16:41 834<?xml version="1.0&qu ...
相关推荐
### Spring配置在DAO和事务层知识点详解 #### 一、Spring框架中的事务管理机制 Spring 框架提供了强大的事务管理功能,支持多种事务管理方式,包括编程式事务管理和声明式事务管理。其中,声明式事务管理是通过...
2. **分层设计**:Spring框架支持分层的设计模式,这意味着不同的业务功能可以被封装在不同的层中,例如Web层负责处理用户界面,Service层处理业务逻辑,DAO层处理数据访问。这样的设计有助于保持代码的清晰度,并...
在Spring框架中,DAO(Data Access Object)层是应用程序与数据库交互的核心部分。Spring提供了多种方式来支持DAO的配置,使得开发人员可以灵活地选择最适合项目需求的数据访问策略。以下将详细阐述Spring对DAO支持...
### Spring事务配置的五种方式详解 #### 一、引言 在企业级应用开发中,事务处理是非常重要的一部分,特别是在涉及多个数据库操作时。Spring框架提供了强大的事务管理功能,支持编程式和声明式两种事务处理方式。...
总之,Spring Boot通过其强大的自动配置和依赖注入机制,使得在IDEA中实例化和使用DAO层变得非常简单。开发者只需要关注业务逻辑,而无需过多关注底层的数据访问细节。这大大提高了开发效率,也使得代码更加模块化和...
### Spring事务与数据库操作 #### 一、Spring的声明式事务管理 在现代软件开发中,事务处理是非常关键的一部分,特别是在涉及多个数据操作时。Spring框架提供了强大的事务管理能力,可以方便地集成到应用程序中。...
首先,`DAO` 层是业务逻辑和数据库操作之间的隔离层,通常包含了增删改查等基本操作。在 `Spring` 框架中,`DAO` 类会被配置为 `Spring` 的bean,通过依赖注入来获取数据库连接或其他依赖。在测试 `DAO` 层时,我们...
5. 在业务层调用Dao的代理对象:在Service层或Controller层,注入Dao的代理对象,通过代理对象调用Dao的方法,Spring会自动处理事务的生命周期。 通过这样的方式,我们能够实现Hibernate Dao层的自动事务管理,让...
提供的XML配置示例展示了如何在Spring中配置声明式事务。具体来说,该示例包括以下几个关键组件: 1. **SessionFactory Bean**:用于配置Hibernate的SessionFactory实例,它是Hibernate的核心组件之一,负责创建...
通过Spring框架实现DAO模式,不仅可以有效地分离业务逻辑和数据访问逻辑,还能借助Spring的事务管理和依赖注入等特性,大大提升代码的可维护性和扩展性。此外,结合AOP的使用,可以使代码更加清晰,减少冗余,提高...
在Web应用程序的开发中,DAO(Data Access Object)层是一个至关重要的部分,它负责与数据库进行交互,隔离业务逻辑和数据存储的细节。本篇文章将深入探讨DAO层的设计与实现经验,结合源码分析和实用工具,以提高...
DAO(Data Access Object)模式是一种常见的设计模式,用于隔离业务逻辑层与数据访问层。在Spring3中,我们可以通过接口定义通用的CRUD(Create, Read, Update, Delete)操作,然后创建一个实现该接口的抽象类,...
标题"ifunsu封装基于springjdbc的dao层api"指的是一个特定的项目或库,名为ifunsu,它已经对Spring JDBC进行了封装,以创建更易用的数据访问对象(DAO)层API。DAO层是应用程序中负责与数据库进行交互的部分,通常...
- 示例代码展示,如如何创建DAO接口和实现类,以及如何在业务逻辑层中使用DAO - 关于事务管理在三层结构中的处理,如何在DAO中控制事务边界 `Base_DAO.rar`可能包含的资源有: - 基础DAO接口和实现类的源代码,例如...
在Service层或具体的业务逻辑方法上添加 `@Transactional` 注解来管理事务。可以通过设置 `readOnly` 属性为 `false` 来显式地声明事务不是只读的,如下所示: ```java @Service public class UserServiceImpl ...
Spring 2.5 实现事务管理(本地事务、分布式事务) Spring 框架提供了对事务管理的支持,它可以使得事务的管理变得更加简洁和灵活。...通过使用 Spring 的事务管理器和抽象的 DAO,可以实现灵活、可维护的业务逻辑。
在Struts2+Hibernate+Spring的集成中,泛型DAO扮演着重要的角色,它使得DAO层对所有实体类的操作变得统一和规范。 首先,让我们详细了解一下Struts2。Struts2是基于拦截器的MVC框架,它提供了强大的动作映射、结果...
在实际项目中,我们通常会创建一个UserDao接口,定义如getUserById()、saveUser()等方法,然后在配置文件中声明DataSource和JdbcTemplate,利用Spring的AOP功能实现DAO接口,以达到事务控制和异常处理。 总结,...