2024年5月31日发(作者:)

Spring事务配置的五种方法

2009-04-24 10:20

总结如下:

Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、

TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机

制这部分。

DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化,比如使

用Hibernate进行数据访问时,DataSource实际为SessionFactory,TransactionManager的

实现为HibernateTransactionManager。

具体如下图:

根据代理机制的不同,总结了五种Spring事务的配置方式,配置文件如下:

第一种方式:每个Bean都有一个代理

xmlns:xsi="/2001/XMLSchema-instance"

xmlns:context="/schema/context"

xmlns:aop="/schema/aop"

xsi:schemaLocation="/schema/beans

/schema/beans/

/schema/context

/schema/context/

/schema/aop

/schema/aop/">

class="essionFactoryBean">

抽象类实现这个接口------>具体的业务类

那么这个抽象类就是框架类了,封装了一些具体业务类通用的框架了

例子:

AbstractPlatformTransactionManager->HibernateTransactionManager->PlatformTransactionManager

-->

class="ateTransactionManager">

class="ctionProxyFactoryBean">

PROPAGATION_REQUIRED

TransactionAttributeSource

主要是处理 哪个方法需要事务,以及事务是什么级别的,

transactionAttributeSource 是类的实例 transactionAttributes是 transactionAttributeSource需要处理的属性

transactionAttributeSource 会根据 TransactionAttribute 属性类 和 对应的 class method生成

TransactionAttribute类

这两个属性说明在 TransactionProxyFactoryBean 上有 setTransactionAttributeSource()与

setTransactionAttributes()方法,

它们是用来设定交易属性的策略实例。

ctionAttributeSource上有一 个 getTransactionAttribute()

方法,

您可以根据传递给它的Method实例与Class实例,决定该返回一个什么内容的

ction .ctionAttribute 实例

如何你只设置了 transactionAttributes,TransactionProxyFactoryBean会把transactionAttributes的值传入

内部的事务拦截器中TransactionInterceptor中

TransactionInterceptor通过调用父类 TransactionAspectSupport的

public void setTransactionAttributes(Properties transactionAttributes) {

NameMatchTransactionAttributeSource tas = new NameMatchTransactionAttributeSource();