一.
使用TransactionProxyFactoryBean创建事务代理(通常事务代理以Service层为目标bean)
<bean id="personService" class="com.lin.personServiceImpl">
<property name="personDao" ref="personDao"/>
</bean>
//配置hibernate的事务管理器,使用HibernateTransactionManager类,该类实现了PlatformTransactionManager接口,针对hibernate 持久化连接的特定实现
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
//配置personService bean的事务代理
<bean id="personServiceProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
//指定事务管理器
<property name="transactionManager" ref="transactionManager"/>
//指定需要生成代理的日标bean
<property name="persionService" ref="persionService"/>
//指定事务属性
<property name="transactionAttributes"
<props>
<prop key="insert*">PROPAGATION_REQUIRED,-MyCheckedException</prop>
<prop key="update*>PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
二.使用自动创建代理简化事务配置
使用BeanNameAutoProxyCreator 和DefaultAdvisorAutoProxyCreator创建代理时,并不一定是创建事务代理,关键在于传入的拦截器,如果传入事务拦截器,将可自动生成事务代理.
//使用jdbc局部事务策略
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
//配置目标bean1,该目标bean将由Bean后处理器自动生成代理
<bean id="testbean1" class="com.lin.Testbean1Impl">
<property name="dataSource" ref="dataSource"/>
</bean
//配置目标bean2,该目标bean将由Bean后处理器自动生成代理
<bean id="testbean2" class="com.lin.Testbean2Impl">
<property name="dataSource" ref="dataSource"/>
</bean
//配置事务拦截器bean
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
//事务拦截器需要注入一个事务管理器
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
//定义事务传播属性
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
//定义BeanNameAutoProxyCreator的Bean后处理器
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>testbean1</value>
<value>testbean2</value>
</list>
//此处可以增加其他需要创建事务代理的bean
</property>
//定义BeanNameAutoProxyCreator所需要的拦截器
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
//此处可以增加其他新的Interceptor
</list>
</property>
</bean>
分享到:
相关推荐
在深入探讨Spring事务代理配置之前,我们先简要回顾一下Spring框架的核心概念。Spring是一个开源的Java平台,它提供了一套全面的编程和配置模型,主要用于简化企业级应用的开发。其中,依赖注入(Dependency ...
每种事务配置方式都有其适用场景和优缺点。第一种方式需要手动配置事务规则,而第二、三种方式通过注解简化了配置,第四种方式适用于不依赖接口的情况,第五种方式则提供了最大的灵活性。在实际开发中,我们通常会...
### Spring事务配置的五种方式详解 #### 一、引言 在企业级应用开发中,事务处理是非常重要的一部分,特别是在涉及多个数据库操作时。Spring框架提供了强大的事务管理功能,支持编程式和声明式两种事务处理方式。...
Spring 事务管理是其核心特性之一,用于确保在执行数据库操作时的一致性和...理解每种方式的工作原理和优缺点,可以帮助你更好地进行事务配置。Spring 的事务管理机制确保了数据的一致性,是构建企业级应用的重要基石。
根据提供的信息,我们可以深入探讨Spring框架中的声明式事务配置及其多种实现方式。声明式事务管理是一种简化事务管理的方式,它允许开发人员通过配置而非编程来指定事务边界,从而减少了代码的复杂性并提高了可维护...
以下是对Spring声明式事务配置的详细说明: 1. **Spring 1.x 声明事务方式** 在Spring 1.x中,声明式事务有两种主要的配置方式,第一种是通过XML配置逐个为每个业务类创建事务代理。首先,你需要声明一个事务管理...
Spring事务管理提供了统一的事务处理模型,使得开发者无需关注具体数据库访问技术的事务细节,简化了事务控制代码,提高了代码的可读性和可维护性。无论是使用注解还是AOP配置,都能有效地管理和协调事务,确保应用...
结合上述配置,Spring会自动管理事务的开始、提交、回滚等操作,大大简化了事务管理的代码。在实际项目中,根据业务需求,我们可以灵活调整这些配置,以实现高效、安全的事务处理。 在提供的压缩包文件`Spring-JDBC...
3. **代理机制**:这是Spring事务管理的关键,它创建了一个代理对象,用于在方法调用前后插入事务控制逻辑。代理机制可以通过XML配置或注解来实现。 以下是Spring事务配置的五种常见方式: ### 1. **每个Bean一个...
在Java后端开发中,Spring的事务管理机制大大简化了事务控制,使得开发者可以更专注于业务逻辑,而不用关心底层事务的管理。通过声明式事务管理,我们只需在方法上添加@Transactional注解,而无需编写手动的try-...
本资源包提供了进行Spring事务管理开发所需的所有关键库,包括框架基础、核心组件、AOP(面向切面编程)支持、日志处理、编译工具以及与数据库交互的相关jar包。下面将对这些知识点进行详细解释: 1. **Spring框架*...
7. **案例分析**:"SPRING事务管理案例分析.docx"很可能包含了具体的项目实例,详细讲解了如何在Spring项目中配置和使用事务管理,以及如何解决实践中遇到的问题。而"studyspring"可能是源代码目录,包含了实现这些...
Spring 提供了声明式事务管理,允许开发者在不编写事务管理代码的情况下实现事务控制,极大地简化了事务处理。 实验环境主要包括 Eclipse 或 MyEclipse 开发工具,以及 Spring 4.0 及以上版本,JDK 1.7 及以上版本...
综上所述,Spring事务管理配置涉及多个层面,包括数据库连接的配置、SessionFactory的创建、事务管理器的定义以及事务拦截器的配置等。正确理解和应用这些配置,对于构建健壮、高效的企业级Java应用至关重要。
4. **事务配置**:在Spring中,事务管理有两种方式:编程式事务管理和声明式事务管理。通常我们采用声明式事务管理,通过`<tx:annotation-driven>`标签启用基于注解的事务管理。事务的传播行为、隔离级别、超时时间...