`

spring事务配置方法(TransactionProxyFactoryBean继承)

阅读更多

大部分情况下,每个事务代理的事务属性大同小异,事务代理的实现类都是TransactionProxyFactoryBean,事务代理bean都必须注入事务管理器。
对于这种情况,Spring提供了bean与bean之间的继承,可以简化配置。将大部分的通用配置,配置成事务模板,而实际的事务代理bean,则继承事务模板。这种配置方式可以减少部分配置代码,下面是采用继承的配置文件:

Xml代码
  1. <?xml version="1.0" encoding="gb2312"?>
  2. <!-- Spring配置文件的文件头,包含DTD等信息-->
  3. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
  4. "http://www.springframework.org/dtd/spring-beans.dtd">
  5. <beans>
  6. <!--定义数据源-->
  7. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  8. <!-- 定义数据库驱动-->
  9. <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
  10. <!-- 定义数据库url-->
  11. <property name="url"><value>jdbc:mysql://localhost:3306/spring</value></property>
  12. <!-- 定义数据库用户名-->
  13. <property name="username"><value>root</value></property>
  14. <!-- 定义数据库密码-->
  15. <property name="password"><value>32147</value></property>
  16. </bean>
  17. <!--定义一个hibernate的SessionFactory-->
  18. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  19. <!-- 定义SessionFactory必须注入DataSource-->
  20. <property name="dataSource"><ref local="dataSource"/></property>
  21. <property name="mappingResources">
  22. <list>
  23. <!--以下用来列出所有的PO映射文件-->
  24. <value>Person.hbm.xml</value>
  25. </list>
  26. </property>
  27. <property name="hibernateProperties">
  28. <props>
  29. <!--此处用来定义hibernate的SessionFactory的属性:
  30. 不同数据库连接,启动时选择create,update,create-drop-->
  31. <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
  32. <prop key="hibernate.hbm2ddl.auto">update</prop>
  33. </props>
  34. </property>
  35. </bean>
  36. <!-- 定义事务管理器,使用适用于Hibernte的事务管理器-->
  37. <bean id="transactionManager"
  38. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  39. <!-- HibernateTransactionManager bean需要依赖注入一个SessionFactory bean的引用-->
  40. <property name="sessionFactory"><ref local="sessionFactory"/></property>
  41. </bean>
  42. <!-- 配置事务模板,模板bean被设置成abstract bean,保证不会被初始化-->
  43. <bean id="txBase" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
  44. lazy-init="true" abstract="true">
  45. <!-- 为事务模板注入事务管理器-->
  46. <property name="transactionManager"><ref bean="transactionManager"/></property>
  47. <!-- 设置事务属性-->
  48. <property name="transactionAttributes">
  49. <props>
  50. <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
  51. <prop key="*">PROPAGATION_REQUIRED</prop>
  52. </props>
  53. </property>
  54. </bean>
  55. <!-- 实际的事务代理bean-->
  56. <bean id="personDao" parent="txBase">
  57. <!-- 采用嵌套bean配置目标bean -->
  58. <property name="target">
  59. <bean class="lee.PersonDaoHibernate">
  60. <property name="sessionFactory"><ref local="sessionFactory"/></property>
  61. </bean>
  62. </property>
  63. </bean>
  64. </beans>
 

这种配置方式,相比前面直接采用TransactionProxyFactoryBean的事务代理配置方式,可以大大减少配置文件的代码量。每个事务代理的配置都继承事务模板,无需重复指定事务代理的实现类,无需重复指定事务传播属性——当然,如果新的事务代理有额外的事务属性,也可指定自己的事务属性,此时,子bean的属性覆盖父bean的属性。当然每个事务代理bean都必须配置自己的目标bean,这不可避免。
上面的配置可看出,事务代理的配置依然是增量式的,每个事务代理都需要单独配置——虽然增量已经减少,但每个事务代理都需要单独配置。

分享到:
评论

相关推荐

    Spring事务配置的五种方式

    下面将详细介绍这五种Spring事务配置方式。 1. **基于接口的事务代理(TransactionProxyFactoryBean)** 在第一种配置方式中,每个Bean都有一个单独的代理。首先,我们配置DataSource(如SessionFactory)和...

    spring 事务配置的五种方法

    ### Spring 事务配置的五种方法详解 #### 一、引言 在现代软件开发过程中,事务处理是一项至关重要的技术,特别是在涉及数据库操作时。Spring 框架提供了丰富的事务管理功能,支持多种不同的配置方式来满足不同...

    Spring事务配置的五种方式[参照].pdf

    以下是对Spring事务配置五种方式的详细解释: 1. **基于代理的事务管理(Proxy-based Transaction Management)** 这是第一种配置方式,每个Bean都有一个独立的代理。在示例代码中,`TransactionProxyFactoryBean`...

    spring事务

    除了上述两种方式外,还有三种常用的Spring事务配置方法,包括: 1. **基于XML的声明式事务**:通过在XML配置文件中使用`&lt;tx:advice&gt;`和`&lt;tx:method&gt;`元素来定义事务切面和事务属性,适用于需要显式控制事务边界的...

    Spring事物配置的五种模式

    以上介绍了五种Spring事务配置的方法,每种方法都有其适用的场景。在实际开发过程中,可以根据项目的具体需求选择合适的事务配置方式,从而更好地满足业务需求。需要注意的是,合理的设计和配置对于确保系统的稳定性...

    spring 事务

    “工具”可能是指Spring提供的各种事务管理工具,如TransactionDefinition、TransactionStatus等,这些工具类帮助我们更好地进行事务配置和管理。 至于压缩包文件名称“spring2-tansaction”,可能是包含了一些...

    Spring事务相关类Uml图

    本文将深入探讨Spring事务管理的相关类及其UML图,帮助理解这些类之间的关系和作用。 首先,Spring提供了两种事务管理方式:编程式事务管理和声明式事务管理。编程式事务管理通过调用`PlatformTransactionManager`...

    Spring的事务配置

    接下来,我们介绍两种常见的Spring事务配置方式: ### 第一种方式:每个Bean都有一个代理 在这种配置中,每个需要事务管理的Bean都有一个特定的代理实例,如上面的XML配置所示。`TransactionProxyFactoryBean`用于...

    spring1.2的配置-jdbc

    ### Spring 1.2 的 JDBC 配置详解 在 Spring 框架 1.2 版本中,...通过上述详细的配置,Spring 1.2 能够有效地管理数据库连接、事务处理以及业务逻辑层的操作,极大地简化了开发工作并提高了代码的可维护性和扩展性。

    spring框架配置bean的高级属性

    无论是配置数据源、SessionFactory还是事务管理器,Spring都提供了丰富的配置选项,使得开发者能够根据实际需求进行定制化配置。这种高度的可配置性是Spring框架的一大优势,也是其深受广大开发者喜爱的原因之一。

    spring2.0声明式事务

    ### Spring 2.0 声明式事务配置详解 #### 一、Spring 2.0 声明式事务概述 随着 Spring 框架的发展,从 Spring 1.x 到 Spring 2.0 版本,声明式事务管理方式有了显著改进。在 Spring 1.x 中,主要通过 AOP 方式实现...

    spring面试题大全

    2. 声明式事务管理:通过注解或XML配置,Spring会自动管理事务的开始、提交、回滚。如使用@Transactional注解标记方法,指定传播行为(如PROPAGATION_REQUIRED表示必须在事务中运行,无事务则新建)。 声明式事务...

    Spring.3.x企业应用开发实战(完整版).part2

    10.3.1 Spring事务传播机制回顾 10.3.2 相互嵌套的服务方法 10.4 多线程的困惑 10.4.1 Spring通过单实例化Bean简化多线程问题 10.4.2 启动独立线程调用事务方法 10.5 联合军种作战的混乱 10.5.1 Spring事务管理器的...

    Spring 系列,第 2 部分 当 Hibernate 遇上 Spring

    Spring AOP的TransactionProxyFactoryBean就是一个用于事务管理的代理类,它可以拦截并添加事务上下文到JavaBean的方法调用中,从而简化事务处理的代码。 接着,文章提到了Spring对Hibernate的集成支持,它解决了...

    spring面试题集

    2. 声明式事务管理:这是Spring推荐的方式,通过在XML配置或注解中声明事务属性,Spring会自动处理事务的开始、提交、回滚等操作。例如,使用TransactionProxyFactoryBean可以创建一个具有事务管理能力的代理类,...

    Spring3.x企业应用开发实战(完整版) part1

    10.3.1 Spring事务传播机制回顾 10.3.2 相互嵌套的服务方法 10.4 多线程的困惑 10.4.1 Spring通过单实例化Bean简化多线程问题 10.4.2 启动独立线程调用事务方法 10.5 联合军种作战的混乱 10.5.1 Spring事务管理器的...

    spring面试题

    - **配置 DataSource**:在 Spring 配置文件中定义数据源。 - **创建 SessionFactory**:基于 DataSource 创建 SessionFactory。 - **DAO 继承 HibernateDaoSupport**:DAO 类继承自 HibernateDaoSupport,并使用...

    面试知识点总结--spring面试题大全.pdf

    例如,使用TransactionProxyFactoryBean,可以配置PROPAGATION_REQUIRED等事务传播行为,Spring会自动处理事务的提交和回滚。 总的来说,Spring框架通过其强大的功能和设计理念,极大地简化了Java后端开发,提高了...

    spring代理详解.txt

    `TransactionProxyFactoryBean`继承自`AbstractSingletonProxyFactoryBean`,专门用于处理事务管理。这意味着它只能生成单例的代理实例,无法满足每次请求都需要新实例的场景。如果需要支持非单例的事务管理,建议...

Global site tag (gtag.js) - Google Analytics