Spring事务管理---声明式(1)利用
TransactionProxyFactoryBean生成事务管理
通常建议采用声明式事务管理
优势:代码中无需关注事务逻辑,让spring声明式事务管理负责事务逻辑,声明式事务管理无需与具体的事务逻辑耦合,可以方便地在不同事务逻辑之间切换。
声明式事务管理的配置方式,通常有如下三种:
1、 使用TransactionProxyFactoryBean为目标bean生成事务代理的配置。此方式是最传统,配置文件最臃肿、难以阅读的方式
2、 采用bean继承的事务代理配置方式,比较简洁,但依然是增量式配置
3、 使用beanNameAutoProxyCreator,根据bean name自动生成事务代理的方式,这个是直接利用spring的aop框架配置事务代理的方式,需要对spring的aop框架有所理解,但是这种方式避免了增量式配置,效果非常不错
4、 DefaultAdvisorAutoProxyCreator:这个也是直接利用spring的aop框架配置事务代理的方式,效果也非常不错,只是这种方式的可读性不如第三种方式
1、利用TransactionProxyFactoryBean生成事务代理
采用这种配置的时候,配置文件增长的非常快,每个bean有需要两个bean配置,一个目标,另外还需要使用TransactionProxyFactoryBean配置一个代理bean。这是一种最原始的配置方式,下面是使用TransactionProxyFactoryBean的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<!-- JDBC Properties -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:jdbc.properties</value>
</list>
</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<!--
<property name="initialSize" value="10" />
<property name="maxActive" value="50" />
-->
</bean>
<!-- Use JNDI dataSource -->
<!--
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/neo"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
-->
<bean id="jdbcTemplate" class="ssf.teachSys.service.TeachSysJdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource" />
</bean>
<bean id="callableStatementTemplate" class="ssf.core.common.CallableStatementTemplate">
<property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
<bean id="baseTxService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="proxyTargetClass" value="true" />
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="fetch*">PROPAGATION_REQUIRED</prop>
<prop key="rank*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
</beans>
2、利用继承简化配置
大部分情况下,每个事务代理的事务属性大同小异,事务代理的实现类都是TransactionProxyFactoryBean,事务代理bean都必须注入事务管理器
对于这种情况,spring 提供了bean与bean 之间的继承,可以简化配。将大部分的通用配置,配置成事务模板,而实际事务代理bean,则继承事务模板,这种配置方式可以减少部分配置代码,下面是采用继承的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans default-autowire="byName" default-merge="true">
<bean id="functionService" parent="baseTxService">
<property name="target">
<bean class="ssf.teachSys.service.FunctionService" />
</property>
</bean>
</beans>
相关推荐
在Java中,实现分布式事务的方法有很多,例如使用JTA(Java Transaction API)或者Spring框架的声明式事务管理。 1. **JTA(Java Transaction API)**:这是Java平台的标准API,用于管理全局事务,可以跨越多个资源...
Java以其稳定性和可扩展性,成为了开发大型、分布式系统如教学事务管理系统的首选语言。 【Java 源代码】是开发者编写程序时使用的文本文件,包含了一系列用Java语法编写的指令,可以被Java编译器转换成可执行的...
Java 事务管理和事务分类主要涉及如何确保在多步骤操作中数据的一致性和完整性。事务是数据库操作的基本单元,遵循ACID原则,即原子性、一致性、隔离性和持久性。在Java中,事务处理通常与数据库操作密切相关,尤其...
【Java事务管理】Java事务管理是确保数据一致性的重要机制,主要涉及事务的概念、特性、以及在不同环境下的实现方式。事务是一组操作,遵循原子性、一致性、隔离性和持久性的原则,简称为ACID特性: 1. **原子性...
毕业设计—基于Java的Acme班级事务管理系统,已获老师指导并通过的高分项目。 毕业设计—基于Java的Acme班级事务管理系统,已获老师指导并通过的高分项目。毕业设计—基于Java的Acme班级事务管理系统,已获老师指导...
Java Web项目企业事务管理系统源码,详细的代码注释 本系统的开发工具具体如下。 ● 系统开发平台:MyEclipse 6.5。 ● 数据库管理系统软件:MySQL 5.0。 ● 运行平台:Windows 2000/Windows XP/Windows 2003/...
这是一个基于Java技术的Web项目,主要关注的是企业事务管理系统的实现。这个系统源码的提供,对于学习和理解Java在企业级应用中的实践具有很高的价值。以下将详细讲解与Java Web项目相关的知识点。 1. **Java编程...
《个人日常事务管理系统(Java版)详解》 个人日常事务管理系统是现代生活中不可或缺的一部分,它帮助我们有效地组织和管理日常的琐碎事务,确保生活、工作有序进行。本系统采用Java编程语言开发,具备高度的安全性...
Java+Web项目企业事务管理系统源码是一套完整的Java Web应用程序,用于实现企业级的事务管理。这个系统的核心目标是提供高效、可靠且易于维护的事务处理能力,以满足企业日常运营中的各种业务需求。在本系统中,Java...
"JAVA WEB日常事务管理系统"是一个基于Java Web技术构建的应用,旨在帮助用户管理和处理日常工作中的各种事务,如邮件系统、公告发布以及会议管理等。这个系统采用了一些主流的Java开发框架,如Struts和Hibernate,...
Java企业日常事务管理系统论文+源码Java企业日常事务管理系统论文+源码Java企业日常事务管理系统论文+源码Java企业日常事务管理系统论文+源码Java企业日常事务管理系统论文+源码Java企业日常事务管理系统论文+源码...
在本Java个人事务管理课程设计中,我们将深入探讨如何利用Java技术来构建一个高效、实用的个人事务管理系统。这个系统旨在帮助用户管理他们的日常任务、事件、财务等个人事务,提高生活和工作的组织效率。 首先,...
java代码-使用java解决事务追踪管理系统的源代码 ——学习参考资料:仅用于个人学习使用!
在Java的Spring框架中,事务管理是至关重要的一个部分,特别是在多线程和并发环境下,保证数据的一致性和完整性。Spring提供了丰富的事务管理API来帮助开发者处理事务相关的操作。 首先,我们来看一下Spring事务...
总结来说,Spring 框架的事务管理与 Java 原生的事务管理相比,具有更高的抽象层次和更好的可配置性,使得事务管理更加简单和高效。通过 Spring 的 IOC 容器和 AOP 机制,开发者可以更专注于业务逻辑的实现,而将...
采用java技术构建的一个管理系统。整个开发过程首先对系统进行需求分析,得出系统的主要功能。接着对系统进行总体设计和详细设计。总体设计主要包括系统功能设计、系统总体结构设计、系统数据结构设计和系统安全设计...
本文详细介绍了Java事务设计策略中的关键技术点,包括事务的基本概念、Java事务管理机制、设计模式以及高级技巧。通过对这些知识点的理解和应用,开发者能够在构建Java应用时更加高效地管理事务,确保数据的一致性和...
Spring是Java事务处理的核心功能之一。Spring提供了三种方式来处理事务:编程式事务、声明式事务和注解式事务。 编程式事务是指在Java代码中编写事务处理逻辑。这种方式需要开发人员手动控制事务的开始、提交和回滚...