zoukankan      html  css  js  c++  java
  • 基于 <tx> 和 <aop> 命名空间的声明式事务管理

    环境配置

    项目使用SSH架构,现在要添加Spring事务管理功能,针对当前环境,只需要添加Spring 2.0 AOP类库即可。添加方法:

    • 点击项目右键->Build Path->Add librarys:

    9(V[673_ZRWHP65{U81_AW0

    •  打开Add Libraries对话框,然后选定 MyEclipse Libraries:

    image

    • 点击Next,找到Spring 2.0 aop Libraries并勾选上,点击finsh即可。

    image

    • 如果在项目里面能看到下面的库文件,说明已经安装成功。

    image

    事务配置

    • 首先在/WEB-INF/applicationContext.xml添加以下内容:
    <!-- 配置事务管理器 -->
    
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    
    
    
       <property name="sessionFactory">
    
    
    
           <ref bean="mySessionFactory"/>
    
    
    
       </property>
    
    
    
    </bean>
    

    注:这是作为公共使用的事务管理器Bean。这个会是事先配置好的,不需各个模块各自去配。

    • 下面就开始配置各个模块所必须的部分,在各自的applicationContext-XXX-beans.xml配置的对于事务管理的详细信息。

    首先就是配置事务的传播特性,如下:

    <!--  配置事务传播特性 -->
    
    <tx:advice id="TestAdvice" transaction-manager="transactionManager">
    
        <tx:attributes>
    
          <tx:method name="save*" propagation="REQUIRED"/>
    
          <tx:method name="del*" propagation="REQUIRED"/>
    
          <tx:method name="update*" propagation="REQUIRED"/>
    
          <tx:method name="add*" propagation="REQUIRED"/>
    
          <tx:method name="find*" propagation="REQUIRED"/>
    
          <tx:method name="get*" propagation="REQUIRED"/>
    
          <tx:method name="apply*" propagation="REQUIRED"/>
    
        </tx:attributes>
    
    </tx:advice>
    
    
    
    
    
    <!--  配置参与事务的类 -->
    
    <aop:config>
    
    <aop:pointcut id="allTestServiceMethod" expression="execution(* com.test.testAda.test.model.service.*.*(..))"/>
    
    <aop:advisor pointcut-ref="allTestServiceMethod" advice-ref="TestAdvice" />
    
    </aop:config>

    需要注意的地方:

    (1) advice(建议)的命名:由于每个模块都会有自己的Advice,所以在命名上需要作出规范,初步的构想就是模块名+Advice(只是一种命名规范)。

    (2) tx:attribute标签所配置的是作为事务的方法的命名类型

             如<tx:method name="save*" propagation="REQUIRED"/>

            其中*为通配符,即代表以save为开头的所有方法,即表示符合此命名规则的方法作为一个事务。

            propagation="REQUIRED"代表支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

    (3) aop:pointcut标签配置参与事务的类,由于是在Service中进行数据库业务操作,配的应该是包含那些作为事务的方法的Service类。

           首先应该特别注意的是id的命名,同样由于每个模块都有自己事务切面,所以我觉得初步的命名规则因为 all+模块名+ServiceMethod。而且每个模块之间不同之处还在于以下一句:

           expression="execution(* com.test.testAda.test.model.service.*.*(..))"

           其中第一个*代表返回值,第二*代表service下子包,第三个*代表方法名,“(..)”代表方法参数。

    (4) aop:advisor标签就是把上面我们所配置的事务管理两部分属性整合起来作为整个事务管理。

    图解:

    image

  • 相关阅读:
    Atitit.异步编程技术原理与实践attilax总结
    AjaxToolKit之Rating控件的使用(http://www.soaspx.com/dotnet/ajax/ajaxtech/ajaxtech_20091021_1219.html)
    JavaScript初学指南
    javascript泛型集合类(转)
    HTTP 错误 404.2 Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面
    IIS连接oralce数据库时 提示“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本”
    配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法
    self.location.href的具体用法(转)
    CSS Overflow属性详解(转)
    .net中使用showModalDialog打开模式窗口,在后台代码中使用Response.Write()会弹出新页面
  • 原文地址:https://www.cnblogs.com/shaohz2014/p/3666788.html
Copyright © 2011-2022 走看看