7

我是春天的新手,具有hibernate的工作知识。我的工作是使用 Spring 声明式方法来实现事务。感谢 Google,我在 Google 的帮助下成功地做到了。但无法清楚地理解我在 application-context.xml 中使用的术语。

1.

 <tx-advice>

</tx-advice>
  1. <aop-config>
        // here is point cut were declared
    </aop-config>
    

有人可以向我解释上述观点,同时我也试图从谷歌中理解它。

4

2 回答 2

29

由于您已经成功实施spring transaction

我们可以通过Spring三种方式实现事务:

  1. 平台交易管理。
  2. 声明式事务管理。
  3. 程序化事务管理。

您实现的称为通过 XML 的声明式事务管理

简而言之,您transaction通过 Spring 的AOP功能实现了。

tx:advice XML配置与基于 XML 的 AOP 配置结合起来可以实现协同组合。例如,我们可以使用方法名称来自动确定我们想要在该方法上应用哪种事务。

假设我们要将事务应用于所有以 and 开头的方法savemodify例如savePizza(), saveColdDrink(), modifyOrder(), modifyBill()。对于这些,我们必须advice在我们的 xml 文件中定义:

<tx:advice id="txAdvice" >
  <tx:attributes>
    <tx:method name="save*" propagation="REQUIRED"/>
    <tx:method name="modify*" propagation="REQUIRED"/>
  </tx:attributes>
</tx:advice> 

我们的建议已经准备就绪,正如我们在上面所说的那样,我们只希望在以saveor开头的方法上进行事务modify。现在我们将通过使用pointcutelement of来说明哪些 bean 需要上述建议aop-config。例如,假设我们想将事务通知应用到com.mytransaction.service包内所有可用的类。

为此,我们必须在 xml 文件中添加以下行:

<aop:config>
  <aop:pointcut id="allServices"
    expression="execution(*com.mytransaction.service.*.*(..))"/>
  <aop:advisor advice-ref="txAdvice" pointcut-ref="allServices"/>
</aop:config>

简而言之,<tx:advice>意思是我们要做什么或我们想要应用的交易行为。 pointcut里面的元素<aop-config>说我们要在哪里应用交易,比如说<aop:advisor advice-ref="txAdvice" pointcut-ref="allServices"/>

于 2012-10-13T19:27:05.627 回答
2

<tx:advice>标记特定于事务管理配置,而该<aop:config>标记通常可用于进行面向方面的编程

AOP可以用于比事务更多的事情,例如日志记录或访问控制。此外,事务管理不一定必须使用 AOP 来实现,它只是通常在 Spring 中完成的方式(但 Spring 也支持Programmatic Transaction Management)。

于 2012-10-13T13:36:48.380 回答