Spring2.5声明式事务管理详解

Spring2.5声明式事务管理详解

ID:40568228

大小:58.63 KB

页数:20页

时间:2019-08-04

Spring2.5声明式事务管理详解_第1页
Spring2.5声明式事务管理详解_第2页
Spring2.5声明式事务管理详解_第3页
Spring2.5声明式事务管理详解_第4页
Spring2.5声明式事务管理详解_第5页
资源描述:

《Spring2.5声明式事务管理详解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、大多数Spring用户选择声明式事务管理。这是对应用代码影响最小的选择,因此也最符合非侵入式轻量级容器的理念。Spring的声明式事务管理是通过SpringAOP实现的,因为事务方面的代码与Spring绑定并以一种样板式风格使用,不过尽管如此,你一般并不需要理解AOP概念就可以有效地使用Spirng的声明式事务管理。从考虑EJBCMT和Spring声明式事务管理的相似以及不同之处出发是很有益的。它们的基本方法是相似的:都可以指定事务管理到单独的方法;如果需要可以在事务上下文调用setRollbackOnly()方法。不同之处在于:·不像EJBCMT绑定在JTA上,Spring声明式事务

2、管理可以在任何环境下使用。只需更改配置文件,它就可以和JDBC、JDO、Hibernate或其他的事务机制一起工作。·Spring的声明式事务管理可以被应用到任何类(以及那个类的实例)上,不仅仅是像EJB那样的特殊类。·Spring提供了声明式的回滚规则:EJB没有对应的特性,我们将在下面讨论。回滚可以声明式的控制,不仅仅是编程式的。·Spring允许你通过AOP定制事务行为。例如,如果需要,你可以在事务回滚中插入定制的行为。你也可以增加任意的通知,就象事务通知一样。使用EJBCMT,除了使用setRollbackOnly(),你没有办法能够影响容器的事务管理。·Spring不提供高端

3、应用服务器提供的跨越远程调用的事务上下文传播。如果你需要这些特性,我们推荐你使用EJB。然而,不要轻易使用这些特性。因为通常我们并不希望事务跨越远程调用。TransactionProxyFactoryBean在哪儿?Spring2.0及以后的版本中声明式事务的配置与之前的版本有相当大的不同。主要差异在于不再需要配置TransactionProxyFactoryBean了。Spring2.0之前的旧版本风格的配置仍然是有效的;你可以简单地认为新的替你定义了TransactionProxyFactoryBean。回滚规则的概念比较重要:它使我们能够指定什么样的异常(和t

4、hrowable)将导致自动回滚。我们在配置文件中声明式地指定,无须在Java代码中。同时,我们仍旧可以通过调用TransactionStatus的setRollbackOnly()方法编程式地回滚当前事务。通常,我们定义一条规则,声明MyApplicationException必须总是导致事务回滚。这种方式带来了显著的好处,它使你的业务对象不必依赖于事务设施。典型的例子是你不必在代码中导入SpringAPI,事务等。对EJB来说,默认的行为是EJB容器在遇到系统异常(通常指运行时异常)时自动回滚当前事务。EJBCMT遇到应用异常(例如,除了java.rmi.RemoteExcepti

5、on外别的checkedexception)时并不会自动回滚。默认式Spring处理声明式事务管理的规则遵守EJB习惯(只在遇到uncheckedexceptions时自动回滚),但通常定制这条规则会更有用。9.5.1. 理解Spring的声明式事务管理实现本节的目的是消除与使用声明式事务管理有关的神秘性。简单点儿总是好的,这份参考文档只是告诉你给你的类加上@Transactional注解,在配置文件中添加('')行,然后期望你理解整个过程是怎么工作的。此节讲述Spring的声明式事务管理内部的工作机制,以帮助你在面对事务相关的问题时不至于

6、误入迷途,回朔到上游平静的水域。在理解Spring的声明式事务管理方面最重要的概念是:Spring的事务管理是通过AOP代理实现的。其中的事务通知由元数据(目前基于XML或注解)驱动。代理对象与事务元数据结合产生了一个AOP代理,它使用一个PlatformTransactionManager实现品配合TransactionInterceptor,在方法调用前后实施事务。注意尽管使用Spring声明式事务管理不需要AOP(尤其是SpringAOP)的知识,但了解这些是很有帮助的。你可以在第 6 章使用Spring进行面向切面编程(AOP)章找到关于SpringAOP的全部内容。9.5.2

7、. 第一个例子请看下面的接口和它的实现。这个例子的意图是介绍概念,使用Foo和Bar这样的名字只是为了让你关注于事务的用法,而不是领域模型。//我们想做成事务性的服务接口packagex.y.service;publicinterfaceFooService{FoogetFoo(StringfooName);FoogetFoo(StringfooName,StringbarName);voidinsertFoo(Foofoo);voidupda

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。