读书人

spring的事宜

发布时间: 2012-09-05 15:19:34 作者: rapoo

spring的事务

Spring框架其中的一个优点是它全面的事务支持,其好处有:

  1. 为复杂的事务API提供了一致的编程模型,如JTA、JDBC、Hibernate、JPA和JDO
  2. 支持声明式事务管理
  3. 更易于使用的编程式事务管理API
  4. 很好的整合Spring的各种数据访问抽象

???? 传统来说,J2EE有两个事务有两种选择:?全局和本地?.
???? 全局事务由应用服务器管理,使用JTA。
??????????? 其主要限制在于, 通常需要将JTA、JNDI同时使用,因为通常JTA的UserTransaction是通过JNDI获得的。
???? 局部事务和资源相关的,比如和一个JDBC链接关联的事务。
??????????? 其限制在于它们不能同事用于多个事务性资源。例如,使用JDBC连接事务管理的代码不能用于全局的JTA事务中。另外一个缺点是 局部事务趋向于入侵式编程模型。

? ? ? ?Spring解决了这方面的问题,它让开发者能够使用在 任何环境下使用一致的编程模型。它同时提供声明式和编程式事务管理。 事务管理是多数使用者的首选,推荐使用!

局部事务的定义

???? 通常,我们需要先定义一个DataSource,然后使用Spring的DataSourceTransactionManager,并传入指向DataSource的引用:


这里需要说一下 TransactionStatus对象,它代表一个新的或已经存在的事务.

??

/>

transaction-manager 属性的默认值是 transactionManager,如果事务管理器 Bean 的名字即为该值,则可以省略该属性。
虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @Transactional 注解应该只被应用到 public 方法上,否则将被忽略,也不会抛出任何异常。

基于 <tx> 命名空间和基于 @Transactional 的事务声明方式各有优缺点。
基于 <tx> 的方式,其优点是与切点表达式结合,功能强大。利用切点表达式,一个配置可以匹配多个方法,
而基于 @Transactional 的方式必须在每一个需要使用事务的方法或者类上用 @Transactional 标注,尽管可能大多数事务的规则是一致的,但是对 @Transactional 而言,也无法重用,必须逐个指定。
另一方面,基于 @Transactional 的方式使用起来非常简单明了,没有学习成本。开发人员可以根据需要,任选其中一种使用,甚至也可以根据需要混合使用这两种方式。

读书人网 >开源软件

热点推荐