Spring事务管理----声明式(1)利用TransactionProxyFactoryBean生成事务代理

spring 事务管理例子(TransactionProxyFactoryBean代理机制 和 tx/aop) 适用企业系统的sturts1.2+spring2.0+jdbc 的架构。 通过TransactionProxyFactoryBean 代理机制和tx/aop两种方式来管理事务的详细demo 立即下载
Spring事务管理----声明式(1)利用TransactionProxyFactoryBean生成事务代理
2007-11-13 21:37

通常建议采用声明式事务管理。声明式事务管理的优势非常明显:代码中无需关于关注事务逻辑,让Spring声明式事务管理负责事务逻辑,声明式事务管理无需与具体的事务逻辑耦合,可以方便地在不同事务逻辑之间切换。
声明式事务管理的配置方式,通常有如下三种:
1.使用TransactionProxyFactoryBean为目标bean生成事务代理的配置。此方式是最传统,配置文件最臃肿、难以阅读的方式。
2.采用bean继承的事务代理配置方式,比较简洁,但依然是增量式配置。
3.使用BeanNameAutoProxyCreator,根据bean name自动生成事务代理的方式,这是直接利用Spring的AOP框架配置事务代理的方式,需要对Spring的AOP框架有所理解。但这种方式避免了增量式配置,效果非常不错。
4.DefaultAdvisorAutoProxyCreator:这也是直接利用Spring的AOP框架配置事务代理的方式,效果也非常不多,只是这种配置方式的可读性不如第三种方式。

一. 利用TransactionProxyFactoryBean生成事务代理
采用这种方式的配置时候,配置文件的增加非常快,每个bean有需要两个bean配置,一个目标,另外还需要使用TransactionProxyFactoryBean配置一个代理bean。
这是一种最原始的配置方式,下面是使用TransactionProxyFactoryBean的配置文件:

<?xml version="1.0" encoding="gb2312"?>
<!--   Spring配置文件的文件头,包含DTD等信息-->
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd"
>
<beans>
    
<!--定义数据源-->
    
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        
<!--   定义数据库驱动-->
            
<property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
        
<!--   定义数据库url-->
            
<property name="url"><value>jdbc:mysql://localhost:3306/spring</value></property>
        
<!--   定义数据库用户名-->
            
<property name="username"><value>root</value></property>
        
<!--   定义数据库密码-->
            
<property name="password"><value>32147</value></property>
    
</bean>
    
<!--定义一个hibernate的SessionFactory-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        
<!--   定义SessionFactory必须注入DataSource-->
            
<property name="dataSource"><ref local="dataSource"/></property>
            
<property name="mappingResources">
            
<list>
                
<!--以下用来列出所有的PO映射文件-->
                
<value>Person.hbm.xml</value>
            
</list>
            
</property>
            
<property name="hibernateProperties">
            
<props>
<!--此处用来定义hibernate的SessionFactory的属性:
不同数据库连接,启动时选择create,update,create-drop
-->
            
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            
<prop key="hibernate.hbm2ddl.auto">update</prop>
        
</props>
        
</property>
    
</bean>
    
<!--   定义事务管理器,使用适用于Hibernte的事务管理器-->
<bean id="transactionManager"
         class
="org.springframework.orm.hibernate3.HibernateTransactionManager">
            
<!--   HibernateTransactionManager   bean需要依赖注入一个SessionFactory bean的引用-->
            
<property name="sessionFactory"><ref local="sessionFactory"/></property>
    
</bean>
    
<!--定义DAO Bean , 作为事务代理的目标-->
    
<bean id="personDaoTarget" class="lee.PersonDaoHibernate">
        
<!--   为DAO bean注入SessionFactory引用-->
         
<property name="sessionFactory"><ref local="sessionFactory"/></property>
    
</bean>
    
<!--   定义DAO bean的事务代理-->
<bean id="personDao" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        
<!--   为事务代理bean注入事务管理器-->
            
<property name="transactionManager"><ref bean="transactionManager"/></property>
        
<!--   设置事务属性-->
        
<property name="transactionAttributes">
<props>
      
<!--   所有以find开头的方法,采用required的事务策略,并且只读-->
                
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
      
<!--   其他方法,采用required的事务策略 ->
                 <prop key="*">PROPAGATION_REQUIRED</prop>
             </props>
         </property>
        <!--   为事务代理bean设置目标bean
-->
        
<property name="target">
            
<ref local="personDaoTarget"/>
        
</property>
    
</bean>
</beans>

在上面的配置文件中,personDao需要配置两个部分,一个是personDao的目标bean,该目标bean是实际DAO bean,以实际的DAO bean为目标,建立事务代理。一个组件,需要来个bean组成,一个目标bean,一个事务代理。
这种配置方式还有一个坏处:目标bean直接暴露在Spring容器中,可以直接引用,如果目标bean被误引用,将导致业务操作不具备事务性。
为了避免这种现象,可将目标bean配置成嵌套bean,下面是目标bean和事务代理的配置片段:

<!--   定义DAO bean的事务代理-->
<bean id="personDao" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
         
<!--   为事务代理bean注入事务管理器-->
        
<property name="transactionManager"><ref bean="transactionManager"/></property>
        
<!--   设置事务属性-->
        
<property name="transactionAttributes">
              
<props>
                    
<!--   所有以find开头的方法,采用required的事务策略,并且只读-->
                    
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
                    
<!--   其他方法,采用required的事务策略 ->
                     <prop key="*">PROPAGATION_REQUIRED</prop>
              </props>
         </property>
         <!--   为事务代理bean设置目标bean
-->
        
<property name="target">
               
<!--   采用嵌套bean配置目标bean-->
               
<bean class="lee.PersonDaoHibernate">
                  
<!--   为DAO bean注入SessionFactory引用-->
                  
<property name="sessionFactory"><ref local="sessionFactory"/></property>
               
</bean>
        
</property>
</bean>

 

Spring实战之使用TransactionProxyFactoryBean实现声明式事务操作示例 主要介绍了Spring实战之使用TransactionProxyFactoryBean实现声明式事务操作,结合实例形式分析了spring使用TransactionProxyFactoryBean实现声明式事务相关配置、接口设置与使用技巧,需要的朋友可以参考下 立即下载

相关推荐

整车无线布置的综述

车载无线功能日益丰富,涵盖5G、GNSS、V2X等多种技术,布置需兼顾性能与美观。车顶是理想位置,鲨鱼鳍、后视镜等集成方案可优化空间。需考虑射频电缆损耗、GNSS天线视角、V2X全向覆盖等关键因素。整车测试需适应高频段需求,通过链路预算和互补天线设计优化信号。不同车型需定制方案,并注意抗干扰和多频段兼容性。(149字)

Godspeed_zwh的博客 1857

Spring事务管理(二)-TransactionProxyFactoryBean原理

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33738982的博客 1322

研制过程评审活动(三)工程研制阶段

工程研制阶段主要任务、及评审活动

Abel的博客 2387

spring复习:(43)使用TransactionProxyFactoryBean来实现事务时,事务是怎么开启的?

该方法执行到return ((MethodInterceptor) interceptorOrInterceptionAdvice).invoke(this);当调用addStudent时,会直接跳转到JdkDynamicAopProxy的invoke方法(因为实现了接口,代理对象的实现为jdk 动态代理)

amadeus_liu2的博客 598

使用Verilog实现QR分解——嵌入式 [设计与代码]

通过Verilog的硬件描述语言,我们可以将QR分解算法实现为硬件电路,并在嵌入式系统中高效地运行。本文将介绍如何使用Verilog设计并实现QR分解算法,该算法用于将一个矩阵分解为正交矩阵Q和上三角矩阵R。具体而言,QR分解通过对矩阵的列进行正交化处理,得到正交矩阵Q,并将对应的正交化结果存储在上三角矩阵R中。该算法通过将矩阵分解为两个部分,正交矩阵Q和上三角矩阵R,实现了对矩阵的分解和变换。模块,该模块接收待分解矩阵A,并输出正交矩阵Q和上三角矩阵R。下面给出了使用Verilog实现QR分解的源代码。

CodeMaven的博客 620

abapGit 安装与初始化完整指南:从 on-premise 到 SAP BTP ABAP environment 的一条龙实践

本文为ABAP开发者提供abapGit从安装到团队协作的完整指南。内容涵盖社区版ZABAPGIT的on-premise安装、Eclipse ADT插件配置、BTP环境使用及常见网络问题处理。重点包括:获取最新构建的安装步骤、EN语言环境的重要性、ADT插件安装方法、以及如何实现on-premise与BTP间的代码迁移。文中特别强调企业环境下代理设置、证书配置等注意事项,并提供实际操作案例,如将RAP业务对象迁移到BTP环境。文末附有可复用的实施清单,帮助开发者快速落地abapGit。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 413

TransactionProxyFactoryBean

Spring容器中有两种思想很重要,也就是我们常用的Ioc和Aop,如果理解了这两种思想,对于我们学习设计模式和编程有很大的帮助,美国四人帮(GOF)写的设计模式中,有很多都用到了Ioc的思想。简单的说就是依赖注入的思想。常见的一种情况:如果一个类中要复用另外一个类中的功能时,我们可能会首先想到继承,如果你知道Ioc这种思想的话,我想你不会用继承,你会马上想到把要用到功能抽取出来,在我们要用到的类...

wangqiaowqo的专栏 332

基于Matlab的自动泊车系统开发:利用模糊控制实现智能停车解决方案的详细教程

Matlab是一种广泛应用于科学计算、工程建模与仿真的编程语言,其强大的工具箱和简洁的编程语法,使其成为开发自动泊车系统的理想选择。在开始编写代码之前,我们需要搭建Matlab的工作环境,并熟悉相关的工具箱,如Fuzzy Logic Toolbox,用于实现模糊控制。首先,确保你已经安装了Matlab软件,并加载了必要的工具箱。接下来,我们将逐步讲解如何在Matlab中实现自动泊车系统。

qq_38334677的博客 663

TransactionProxyFactoryBean代理事务

文章摘抄至 http://fujiejie.iteye.com/blog/471750   Spring的事务自动管理一般需要四步: 第一步:配置数据源:实现类和数据库 第二步:配置事务管理器:实现类和使用的数据源。 第三步:配置事务拦截器,指定事务拦截的传播属性 第四步:指定哪些类,包使用什么粒度的拦截。   1、spring的配置文件 <!DOCTYPE beans

黄彪博客 484

【史上最全面esp32教程】oled显示篇

esp32-arduino Oled屏幕的使用

m0_62599305的博客 1万+

Open3D 读取、保存、显示点云【2025最新版】

paint_uniform_color给所有的点上一个统一的颜色。博客长期更新,本文最近更新时间为:2025年1月1日。

点云侠的博客 37万+

TransactionProxyFactoryBean spring事务代理的工程bean API讲解/翻译

spring事务对象的工厂Bean,也是spirng aop事务实现原理的核心类

码农的世界你不懂 1876

ThingsBoard PE专业版解决方案技术文档——温度&湿度

温湿度解决方案

weixin_67440240的博客 818

Spring事务管理----声明式:利用TransactionProxyFactoryBean生成事务代理

通常建议采用声明式事务管理。声明式事务管理的优势非常明显:代码中无需关于关注事务逻辑,让Spring声明式事务管理负责事务逻辑,声明式事务管理无需与具体的事务逻辑耦合,可以方便地在不同事务逻辑之间切换。声明式事务管理的配置方式,通常有如下三种:1.使用TransactionProxyFactoryBean为目标bean生成事务代理的配置。此方式是最传统,配置文件最臃肿、难以阅读的方式。2.采用be

gwl216的专栏 2886

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Spring事务管理----声明式 利用TransactionProxyFactoryBean生成事务代理

通常建议采用声明式事务管理。声明式事务管理的优势非常明显:代码中无需关于关注事务逻辑,让Spring声明式事务管理负责事务逻辑,声明式事务管理无需与具体的事务逻辑耦合,可以方便地在不同事务逻辑之间切换。 声明式事务管理的配置方式,通常有如下三种: 1.使用TransactionProxyFactoryBean为目标bean生成事务代理的配置。此方式是最传统,配置文件最臃肿、难以阅读的方式。

zhang434的专栏 1078

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Spring事务——使用TransactionProxyFactoryBean创建事务代理

Spring同时支持编程式事务策略和声明式事务策略,大部分时候,我们都推荐采用声明式事务策略。使用声明式事务策略的优势十分明显: 声明式事务能大大降低开发者的代码书写量,而且声明式事务几乎不影响应用的代码。因此,不论底层事务策略如何变化,应用程序都无需任何改变 应用程序代码无需任何事务处理代码,可以更专注于业务逻辑的实现 Spring可对任何POJO的方法提供

caomiao2006的专栏 6992

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Spring编程式事务管理和声明式事务管理 案例

转账案例使用了Spring事务管理,用两种方式实现:编程式事务管理和声明式事物管理。    其中,编程式事务管理是一种手动修改代码的方式,比较麻烦,在开发过程中很少使用;声明式事务管理有三种方法实现,分别是TransactionProxyFactoryBean的代理方式、基于AspectJ的xml配置方式和基于注解的声明方式,后两种在开发应用中常常出现。

此处省略三千字 3407

用TransactionProxyFactoryBean实现spring的声明式事务

spring对声明式事务是通过它的AOP框架实现的。要在spring中使用声明式事务,需用到TransactionProxyFactoryBean,它类似于ProxyFactoryBean,不过其目的是将方法包装在事务上下文中。 可以创建自己的ProxyFactoryBean来处理事务,也能达到同样的效果,但TransactionProxyFactoryBean是专门为声明式事务设计的,用它

congcongsuiyue的专栏 827

第20章 使用Spring进行事务管理(三)

TransactionProxyFactoryBean是专门面向事务管理的ProxyFactoryBean,它直接将TransactionInterceptor纳入自身进行管理。 使用TransactionProxyFactoryBean代替ProxyFactoryBean进行声明式事务管理,不需要单独声明TransactionInterceptor的bean定义,有关事务的元数据、事务管理器等信息,全都通过TransactionProxyFactoryBean的bean定义指定就可以。这样,同样针对Quo

hello world 11万+

spring 的事务管理

通常通过TransactionProxyFactoryBean设置Spring事务代理。我们需要一个目标对象包装在事务代理中。这个目标对象一般是一个普通Java对象的bean。当我们定义TransactionProxyFactoryBean时,必须提供一个相关的 PlatformTransactionManager的引用和事务属性。 事务属性含有上面描述的事务定义。    class="org

stone_star的专栏 2322
上一篇: myEclipse8.5下SSH2开发时如何删除antlr-2.7.2包
下一篇: SQL Server群集
liulus
博客等级 码龄17年 0粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值