Spring声明式事务配置管理方法

发表于:2014-10-29 10:24

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:wzh123    来源:51Testing软件测试网采编

  注:这是作为公共使用的事务管理器Bean。这个会是事先配置好的,不需各个模块各自去配。
  下面就开始配置各个模块所必须的部分,在各自的applicationContext-XXX-beans.xml配置的对于事务管理的详细信息。
  首先就是配置事务的传播特性,如下:
<!--配置事务传播特性-->
<tx:adviceid="TestAdvice"transaction-manager="transactionManager">
<tx:attributes>
<tx:methodname="save*"propagation="REQUIRED"/>
<tx:methodname="del*"propagation="REQUIRED"/>
<tx:methodname="update*"propagation="REQUIRED"/>
<tx:methodname="add*"propagation="REQUIRED"/>
<tx:methodname="find*"propagation="REQUIRED"/>
<tx:methodname="get*"propagation="REQUIRED"/>
<tx:methodname="apply*"propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!--配置参与事务的类-->
<aop:config>
<aop:pointcutid="allTestServiceMethod"expression="execution(*com.test.testAda.test.model.service.*.*(..))"/>
<aop:advisorpointcut-ref="allTestServiceMethod"advice-ref="TestAdvice"/>
</aop:config>
  需要注意的地方:
  (1)advice(建议)的命名:由于每个模块都会有自己的Advice,所以在命名上需要作出规范,初步的构想就是模块名+Advice(只是一种命名规范)。
  (2)tx:attribute标签所配置的是作为事务的方法的命名类型。
  如<tx:methodname="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标签就是把上面我们所配置的事务管理两部分属性整合起来作为整个事务管理。
  图解:
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号