zoukankan      html  css  js  c++  java
  • Spring事务支持:利用继承简化配置

    因为事务代理的实现类是 TransactionProxyFactoryBean 。 事务代理Bean必须注入事务管理器。

      大部分情况下,每个事务代理的事务属性大同小异,对于这种情况,Spring提供了Bean 与Bean之间的继承,可以简化配置。将大部分的通用配置,配制成事务模板。而实际的事务代理Bean,则继承事务模板。

      其配置文件如下:

    复制代码
    <?xml version = "1.0" encoding = "UTF-8"?>
    <!-- Spring 配置文件的文件头,包含DTD等信息 -->
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
                       "http://www.spingframework.org/dtd/spring-beans.dtd">
        ...
        <!-- 定义事务管理器,使用适用于Hibernate的事务管理 -->
        <bean id = "transactionManager" 
              class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <!-- HibernateTransactionManager bean 需要依赖注入一个SessionFactory bean 的引用 -->
            <property name = "sessionFactory">
                <ref local = "sessionFactory" />
            </property>
        </bean>
        <!-- 配置事务模版,模版Bean被设置成abstract bean ,保证不会被初始化 -->
        <bean id = "txBase"
              class = "org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
              lazy-init = "true" abstract = "true" >
              <!-- 为事务模版注入事务管理器 -->
              <property name = "transactionAttributes" >
                    <props>
                        <prop key = "find*"> PROPAGATION_REQUIRED,readOnly</prop>
                        <prop key = "*" > PROPAGATION_REQUIRED</prop>
                    </prop>
              </property>
        </bean>
        <!-- 实际的事务代理Bean -->
        <bean id = "xsDao" parent = "txBase">
            <!-- 采用嵌套Bean配置目标Bean-->
            <property name = "target">
                <bean class = "org.dao.imp.XsDaoImp">
                    <property name = "sessionFactory">
                        <ref local= "sessionFactory" >
                    </property>
                </bean>
            </property>
        </bean>
    复制代码

      这比直接采用TransactionProxyFactoryBean 的事务代理配置方式,大大减少配置配置文件的代码量。每个事务代理的配置都继承事务模板,无需重复指定事务代理的实现类,无需重复指定传播属性。

  • 相关阅读:
    重新排列数组
    一维数组的动态和
    aiohttp实现爬虫功能
    python django项目创建及前期准备(使用pycharm)
    vue 使用高德开放平台获取经纬度
    git切换分支时,该分支的修改被带到另一个分支
    vue刻度尺组件
    js将PDF转为base64格式,并在将base64格式PDF回显在页面中
    Linux系统(Centos)安装tomcat和部署Web项目
    linux下安装 tomcat 和配置防火墙开放8080端口
  • 原文地址:https://www.cnblogs.com/shaohz2014/p/3671258.html
Copyright © 2011-2022 走看看