spring 中的事物处理机制配置问题

Spring的事务处理机制,给我们编程带来了极大的方便,One-Transaction-Per-Request的实现模式,是本人最为欣赏的!

在之前开始接触Spring的时候,为了实现事务处理的模式,我们在声明事务的时候,一般是这么做

首先声明一个事务模板,

<bean id="txProxyTemplate" abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="move*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>

接着,声明一个service类,使用Spring的事务处理模板

<bean id="userService" parent="txProxyTemplate">
<property name="target">
<bean class="com.nit.training.service.impl.UserServiceImpl">
<property name="userDAO"><ref bean="userDAO"/></property>
</bean>
</property>
</bean>

***********************

这种声明方式我足足用了两年,自从与李刚才师接触后,买了在他著作的《Spring 2.0宝典》,学习之后,发现原来Spring也可以这么配置

基于AOP技术的事务处理方式,首先声明一个事务的拦截器

<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>

接着,声明一个自动代理

<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<value>*Service</value>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>

<bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<property name="transactionInterceptor" ref="transactionInterceptor" />
</bean>

该自动代理的意思是,所有以Service的bean,都是需要使用该拦截器。
以下是ServiceBean的配置

<bean id="userService" class="com.manbu.organization.service.impl.UserServiceImpl" autowire="byName">
<property name="userDAO" ref="userDAO" />
</bean>

这种配置方式简单得多,虽然对于有些程序员觉得使用copy & paste,其实都是一差不多,但是,配置文件至少可以少一大半,方便维护!

时间: 2024-08-09 01:12:48

spring 中的事物处理机制配置问题的相关文章

spring中的事物

spring中的事物 [1]事物的概念 事务的概念:事务指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败. [2]事务的特性 原子性(Atomicity):当事务结束,它对所有资源状态的改变都被视为一个操作,这些操作要不同时成功,要不同时失败:一致性(Consistency):操作完成后,所有数据必须符合业务规则,否则事务必须中止:隔离性(Isolation):事务以相互隔离的方式执行,事务以外的实体无法知道事务过程中的中间状态:持久性(Durable):事务提交后,数据必须以一种持久

Spring中的事物管理----HelloWorld

在学习Spring的事物管理之前明白先明白几个概念1什么是事物:事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用 例子说明:例如银行转账,A账户转账(转200)到B账户,涉及的动作就是A账户余额减少200,B账户余额增加200,把这两个动作当成一个工作单元,要么两个动作一起完成,要么两个动作都不起用 2事物作用是什么:有四大特性,分别是:原子性(就是多个动作组成一个原子操作,要么一起完成,要么一起不起作用)        一致性(就是事物完成后,数

Spring AOP报错处理 Can not set field to $Proxy 在spring中使用事物或AOP遇到的错误

[转] 解决方法: http://forum.springsource.org/showthread.php?85016-IllegalArgumentException-with-ApplicationContextAware-Proxy 在配置文件中加入proxy-target-class="true" <tx:annotation-driven transaction-manager="transactionManager" proxy-target-c

Spring中的事物管理,用 @Transactional 注解声明式地管理事务

事物: 事务管理是企业级应用程序开发中必不可少的技术,  用来确保数据的 完整性和 一致性. 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用 事务的四个关键属性: 原子性:事务是一个原子操作, 由一系列动作组成. 事务的原子性确保动作要么全部完成要么完全不起作用. 一致性:一旦所有事务动作完成, 事务就被提交. 数据和资源就处于一种满足业务规则的一致性状态中. 隔离性:可能有许多事务会同时处理相同的数据, 因此每个事物都应该与其他事务隔离开来,

【好文推荐】Spring中ApplicationContext的事件机制

ApplicationContext事件机制是观察者设计模式的实现,通过ApplicationEvent类和ApplicationListener接口,可以实现ApplicationContext 事件处理.如果容器中有一个ApplicationListener Bean,每当ApplicationContext发布ApplicationEvent时,ApplicationListener Bean将自动被 触发. Spring的事件框架有如下两个重要的成员: ApplicationEvent:

Spring中的事物管理

1.前瞻: 事务管理对于企业应用而言至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到操作过程中机器突然出故障的情况,此时,事务就必须确保出故障前对账户的操作不生效,就像用户刚才完全没有使用过取款机一样,以保证用户和银行的利益都不受损失.在 Spring 中,事务是通过 TransactionDefinition 接口来定义的.该接口包含与事务属性有关的方法. 2.事务隔离级别隔离级别

半夜思考之查漏补缺 , Spring 中的 Bean 继承机制

这里的继承 , 不是 Java 中的继承 , 下面就总结下 Bean继承与Java继承的区别: Spring 中的子类 Bean 和父 Bean 可以是不同类型 , 但是 Java 中的继承则可保证子类是一种特殊的父类 ; Spring 中 Bean 的继承时实例之间的关系 , 因此主要表现为参数值的延续 ; 而 Java 中的继承是类之间的关系 , 主要表现为方法和属性的延续 ; Spring 中的子 Bean 不可作为父 Bean 使用 , 不具备多态性 ; 而 Java 中的子类实例完全可

Spring中的事物管理,基于spring的bean的配置

很多东西与上边的相同,这儿只简介: 导包... 数据库中建立三个表... 建立存放连接数据库的file文件:jdbc.properties: ----------------------------------------------------------------- com.atguigu.spring.tx.xml包下建立, 接口:BookShopDao 类:BookShopDaoImpl 继承于接口,BookShopDao 异常处理类:BookStockException 测试类:JU

Spring中的ApplicationContext事件机制

ApplicationContext的事件机制是观察者设计模式的实现,通过ApplicationEvent类和ApplicationListerner接口来实现. 1. 创建EmailEvent public class EmailEvent extends ApplicationEvent{ private String address; private String text; public EmailEvent(Object source) { super(source); } publi