- 浏览: 135273 次
- 性别:
- 来自: 成都
-
文章分类
最新评论
-
zfcejb:
你好,这X-gen有源码参考吗
X-gen PPT下载——《研磨设计模式》 实战 -
1927105:
LZ研究过Hibernate4里的监听时间吗?我这边用4.3. ...
Hibernate4实战 之第六部分:基本实现原理 -
hbbbs:
看介绍 挺美的!
X-gen PPT下载——《研磨设计模式》 实战 -
jenmhdn:
即这个是综合运用设计模式的
X-gen PPT下载——《研磨设计模式》 实战 -
jenmhdn:
很值得一看
X-gen PPT下载——《研磨设计模式》 实战
Spring框架引人注目的重要因素之一是它全面的事务支持。Spring框架提供了一致的事务管理抽象,这带来了以下好处:
1:为复杂的事务API提供了一致的编程模型,如JTA、JDBC、Hibernate、JPA和JDO
2:支持声明式事务管理
3:提供比复杂的事务API(诸如JTA)更简单的、更易于使用的编程式事务管理API
4:非常好地整合Spring的各种数据访问抽象
Spring事务抽象的关键是事务策略的概念。这个概念由org.springframework.transaction.PlatformTransactionManager接口定义:
java代码:
tTransaction(..)方法根据一个类型为 TransactionDefinition 的参数返回一个 TransactionStatus 对象。返回的 TransactionStatus 对象可能代表一个新的或已经存在的事务(如果在当前调用堆栈有一个符合条件的事务。如同J2EE事务环境,一个 TransactionStatus 也是和执行 线程 绑定的)
TransactionDefinition接口指定
1:事务隔离:当前事务和其它事务的隔离的程度。例如,这个事务能否看到其他事务未提交的写数据?
2:事务传播:通常在一个事务中执行的所有代码都会在这个事务中运行。但是,如果一个事务上下文已经存在,有几个选项可以指定一个事务性方法的执行行为:例如,简单地在现有的事务中继续运行(大多数情况);或者挂起现有事务,创建一个新的事务。Spring提供EJB CMT中常见的事务传播选项。
3:事务超时: 事务在超时前能运行多久(自动被底层的事务基础设施回滚)。
4:只读状态: 只读事务不修改任何数据。只读事务在某些情况下(例如当使用Hibernate时),是一种非常有用的优化。
![](http://sishuok.com/forum/upload/2012/2/23/d0991d3b68979bd3cef7d1b50ba4e8c3__2.jpg)
高层次方案:
首选的方法是使用Spring的高层持久化集成API。这种方式不会替换原始的API,而是在内部封装资源创建、复用、清理、事务同步以及异常映射等功能,这样用户的数据访问代码就不必关心这些,而集中精力于自己的持久化逻辑。
低层次方案 :
在较低层次上,有以下这些类:DataSourceUtils(针对JDBC),SessionFactoryUtils(针对Hibernate),PersistenceManagerFactoryUtils(针对JDO)等等。也就是说,在纯JDBC中,如果你需要使用Spring的事务,那么就需要使用上面的类来管理连接,如下:
Connection conn=DataSourceUtils.getConnection(dataSource);
当然,一旦你用过Spring的JDBC支持或Hibernate支持,你一般就不再会选择 DataSourceUtils 或是别的辅助类了,因为你会更乐意与Spring抽象一起工作,而不是直接使用相关的API。
![](http://sishuok.com/forum/upload/2012/2/23/887390a15bff6681994e50e05bce96a6__3.jpg)
Spring框架提供了一致的事务管理抽象,通常实施事务的步骤是:
1:定义资源(DataSource/SessionFactory……)
2:定义事务管理器(管理资源的事务)
3:定义事务通知:定义了如何实施事务(实施事务的方法名和对应的事务属性),需要使用事务管理器管理事务,定义了如何选择目标对象的方法及实施的事务属性
4:定义advisor(切入点和事务通知):切入点选择需要实施事务的目标对象(通常是业务逻辑层)
5:Spring织入事务通知到目标对象(AOP代理)
要使用Spring的事务,首先要先定义一个与数据源连接的DataSource,然后使用Spring的DataSourceTransactionManager,并传入指向DataSource的引用,比如,JDBC的事务配置如下:
java代码:
- <bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName">
- <value>oracle.jdbc.driver.OracleDriver</value></property>
- <property name="url">
- <value>jdbc:oracle:thin:@localhost:1521:orcl</value></property>
- <property name="username"> <value>test</value> </property>
- <property name="password" value="test"/>
- </bean>
- <bean id="txManager"
- class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/>
- </bean>
如果使用JTA,示例如下:
java代码:
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:jee="http://www.springframework.org/schema/jee"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
- http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
- ">
- <jee:jndi-lookup id="dataSource" jndi-name="jdbc/jpetstore"/>
- <bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager" />
- </beans>
Hibernate的事务配置,示例如下:
1:Spring对Hibernate的集成
2:然后配置事务如下:
可以简单地使用 JtaTransactionManager 来处理Hibernate事务和JTA事务,就像我们处理JDBC,或者任何其它的资源策略一样,如下:
注意任何资源的JTA配置都是这样的,因为它们都是全局事务,可以支持任何事务性资源。在所有这些情况下,应用程序代码根本不需要做任何改动。仅仅通过改变配置就可以改变事务管理方式,即使这些更改是在局部事务和全局事务间切换。
Spring的声明式事务管理是通过AOP实现的,Xml风格的声明式事务配置如下:
java代码:
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
- <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource"/>
- </bean>
- <tx:advice id="txAdvice" transaction-manager="txManager">
- <tx:attributes>
- <tx:method name="get*" read-only="true"/>
- <tx:method name="*"/>
- </tx:attributes>
- </tx:advice>
- <aop:config>
- <aop:pointcut id="myPointCut" expression="execution(* cn.javass.spring3.jdbc.Impl.*(..))"/>
- <aop:advisor advice-ref="txAdvice" pointcut-ref="myPointCut"/>
- </aop:config>
- <bean name="api" class="cn.javass.spring3.jdbc.Impl">
- <property name="ds" ref="dataSource"></property>
- </bean>
- <bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName">
- <value>oracle.jdbc.driver.OracleDriver</value>
- </property>
- <property name="url">
- <value>jdbc:oracle:thin:@localhost:1521:orcl</value>
- </property>
- <property name="username"> <value>ztb</value> </property>
- <property name="password" value="ztb"/>
- </bean>
- </beans>
事务回滚:可以在配置中指定需要回滚的Exception,如下:
<tx:advice/> 有关的设置,默认的 <tx:advice/> 设置如下:
1:事务传播设置是 REQUIRED
2:隔离级别是 DEFAULT
3:事务是 读/写
4:事务超时默认是依赖于事务系统的,或者事务超时没有被支持。
5:任何 RuntimeException 将触发事务回滚,但是任何 checked Exception 将不触发事务回滚
![](http://sishuok.com/forum/upload/2012/2/23/e0b7c37bf9072e9d5c0a98ea8944a41e__4.jpg)
视频配套PPT,视频地址【 Spring3开发实战-独家视频课程 】
评论
1 楼
一碗三餐
2012-08-14
请教一下,我的事物不起作用:事物控制在业务层,junit测试起作用,但页面测试却不起作用,报的错是sql异常,但跟错应该没什么关系,能想到是什么问题吗,谢谢
发表评论
-
Struts2+Spring3+Hibernate3整合
2012-08-14 08:20 1722准备三个框架结合的lib包 Spring3结合Stru ... -
Spring中的事务
2012-08-14 08:19 1214更简单的方式是使用@Transactional ... -
Spring3开发实战 之 第二章:IoC/DI开发(1)
2012-08-13 13:24 0IoC——Inversion of Control, ... -
Spring3开发实战 之 第四章:对JDBC和ORM的支持
2012-08-06 09:46 977简介 Spring提供的DAO(数据访问对象)支持主要 ... -
Spring3开发实战 之 第三章:AOP开发(2)
2012-08-04 06:14 1295启用@AspectJ支持 通过在你的Spring的配置 ... -
Spring3开发实战 之 第三章:AOP开发(1)
2012-08-04 06:13 1259AOP是什么(Aspect Oriented ... -
Spring3开发实战 之 第二章:IoC/DI开发(2)
2012-08-03 12:06 954通过<list/>、<set/> ... -
Spring3开发实战 之 第二章:IoC/DI开发(2)
2012-08-03 10:38 22通过<list/>、<set/> ... -
Spring3开发实战 之 第二章:IoC/DI开发(1)
2012-08-02 12:10 1532IoC——Inversion of Control, ... -
Spring3开发实战 之 第二章:IoC/DI开发(2)
2012-08-01 20:05 127通过<list/>、<set/ ... -
Spring3开发实战 之 第二章:IoC/DI开发(1)
2012-08-01 16:14 59IoC——Inversion of Cont ... -
Spring3开发实战 之 第二章:IoC/DI开发(1)
2012-08-01 16:14 7IoC——Inversion of Cont ... -
Spring3开发实战 之 第二章:IoC/DI开发(1)
2012-08-01 13:02 31IoC——Inversion of Cont ... -
Spring3开发实战 之 第一章:Spring入门
2012-07-30 21:13 1290认识Spring Spring是什么 Sprin ... -
Spring3开发实战 之 第一章:Spring入门
2012-07-30 16:57 45认识Spring Spring是什 ... -
Spring3开发实战 之 第一章:Spring入门
2012-07-30 15:23 62认识Spring Spring是什么 Sprin ...
相关推荐
第5章:对Spring容器进行解构,从内部探究Spring容器的体系结构和运行流程。此外,我们还将对Spring容器一些高级主题进行深入的阐述。 第6章:我们从Spring AOP的底层实现技术入手,一步步深入到Spring AOP的...
以上就是Spring3开发实战中涉及的主要知识点,通过学习和掌握这些内容,开发者可以更好地利用Spring3构建高质量、可维护的企业级Java应用。阅读压缩包中的PDF文件,如Spring3PPT(IoC部分).pdf、Spring3PPT(第三部分)...
根据提供的文件信息,可以推断出您所询问的是关于《Spring 3.x 企业应用开发实战》这本书的内容。该书是关于Spring框架的一个实用指南,主要面向那些需要在企业级环境中使用Spring进行应用程序开发的Java开发者。...
《Spring 3.x企业应用开发实战》是一本深入讲解Spring框架在实际企业环境中应用的书籍。光盘源码是该书配套的实践材料,旨在帮助读者通过实例加深对Spring 3.x版本的理解和掌握。虽然由于文件大小限制,光盘中的jar...
第10章:对实际应用中Spring事务管理各种疑难问题进行透彻的剖析,让读者对Spring事务管理不再有云遮雾罩的感觉。 第11章:讲解了如何使用Spring JDBC进行数据访问操作,我们还重点讲述了LOB字段处理、主键产生...
在《Spring 3.x企业应用开发实战》的第17章中,我们深入探讨了Spring框架在企业级应用中的实际运用。本章主要涵盖了以下几个关键知识点: 1. **AOP(面向切面编程)**:Spring 3.x支持AOP,这是一种强大的设计模式...
《Spring 3.x 企业应用开发实战》是一本深度探讨Spring框架在企业级应用中的实践指南,特别适合那些想要深入理解和应用Spring 3.x版本的开发者。这本书通过丰富的实例和详细的代码,帮助读者掌握如何利用Spring进行...
3. 方便整合其他框架:Spring通过一个简单而强大的集成层,可以整合各种优秀的框架和第三方库,比如Struts、Hibernate等。 4. 事务管理:Spring提供了对声明式事务管理的支持,使得开发者能够以声明方式配置和管理...
《Spring Boot实战》是针对JavaEE开发领域的一本权威指南,Spring Boot作为JavaEE开发的颠覆者,极大地简化了传统JavaEE应用的复杂性,提高了开发效率。这本书全面覆盖了Spring Boot的核心概念、配置以及实战应用,...
第5章 Spring容器高级主题 5.1 Spring容器技术内幕 5.1.1 内部工作机制 5.1.2 BeanDefinition 5.1.3 InstantiationStrategy 5.1.4 BeanWrapper 5.2 属性编辑器 5.2.1 JavaBean的编辑器 5.2.2 Spring默认属性编辑器 ...
在本资源中,"Spring 3.x企业应用开发实战光盘源码part02" 提供了Spring框架3.x版本的企业级应用开发实例代码。这部分是整个教程源码的第二部分,暗示着可能存在一个第一部分,可能包含了基础的设置和初始化工作。...
《Spring 3.x 企业应用实战开发-源码》是一份深入探讨Spring框架在实际企业应用中的实践指南,其中包含了从第二章到第十九章的完整源代码。这份资料是学习和理解Spring 3.x核心特性和实际应用场景的宝贵资源。下面...
3. **AOP**:Spring的AOP支持允许开发者定义横切关注点,如日志、事务管理等,这些关注点可以在多个业务方法中统一处理,提高代码复用性。 4. **数据访问集成**:Spring提供了对JDBC、ORM(Object-Relational ...
《Spring实战》第五版的源代码压缩包"spring实战全部源代码.zip"包含了全面的示例项目,旨在帮助读者深入理解和应用Spring框架。这个压缩包中的"spring-in-action-5-samples-master"目录揭示了书中的各个实战案例,...
1. **Spring3开发实战 之 第五章:Spring中的事务**: 在这一章节中,我们会深入探讨Spring如何管理事务,它是企业级应用中的关键组件。Spring支持编程式事务管理和声明式事务管理,后者更常用于简化代码并降低维护...
在企业级应用开发中,Spring 和 MyBatis 是两个非常重要的框架。Spring 作为一个全面的后端开发框架,提供依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等核心功能,极大地提高了开发效率和代码的可维护...
在Spring 3.x企业应用开发实战中,使用到的各种jar包是实现高效、灵活和可扩展的应用程序架构的关键。这些库提供了丰富的功能,包括依赖注入、面向切面编程、数据持久化、Web MVC以及与其他技术的集成。以下是这些...
在本章"第3章【源码】java web整合开发实战--基于struts 2+hibernate+spring"中,我们将深入探讨如何在Java Web应用程序中集成三个关键的开源框架:Struts 2、Hibernate和Spring。这些框架分别负责控制层、持久层和...
第5章 Spring容器高级主题 5.1 Spring容器技术内幕 5.1.1 内部工作机制 5.1.2 BeanDefinition 5.1.3 InstantiationStrategy 5.1.4 BeanWrapper 5.2 属性编辑器 5.2.1 JavaBean的编辑器 5.2.2 Spring默认属性编辑器 ...
《Spring+3.x企业应用开发实战》是一本深入讲解如何使用Spring框架进行企业级应用程序开发的书籍。在光盘源码中,包含了从第2章到第19章的全部源代码,这些代码实例覆盖了Spring框架的核心特性和实际应用场景。值得...