0

我“继承”了一个旧的 Spring 应用程序。目前它使用的是 Spring 2.5(只升级了一次),并希望进一步升级到 Spring 3。

我了解大部分应用程序配置。只有一个部分我“不是 100%”。我可以大致猜测它可能意味着什么,但我需要绝对确定,因此发布这个问题:

这是配置片段(取决于此处未显示的注释驱动事务管理器):

<aop:config>
    <aop:advisor pointcut="execution(* *..ProductManager.*(..))"
        advice-ref="txAdvice" />
</aop:config>

<tx:advice id="txAdvice">
    <tx:attributes>
        <tx:method name="save*" />
        <tx:method name="*" read-only="false" />
    </tx:attributes>
</tx:advice>

我的具体两个问题是:

  • “执行(* ..ProductManager.(..))”是什么意思(我理解切入点的说法)
  • 在建议的属性部分,我们说将事务应用于所有与保存*相关的方法,并且对于所有内容,只读都是错误的。谁能解释为什么该设置有意义?对于所有具有事务支持的方法(即仅保存 * 方法),它是否是附加且有效的说法,我也希望这些方法不是只读事务。或者它是否对包容性事务过滤器(在切入点中定义)的每种方法应用了不同的东西(即某种形式的事务支持)。

感谢您的任何澄清。拜托,没有一般的答案-我需要对此进行具体解释。

4

2 回答 2

2

由于具有默认值为 false 的tx:method属性,表示事务是读/写的。read-only

所以在我看来,

<tx:method name="save*" read-only="false" /> <tx:method name="*" />

相当于

<tx:method name="*" />

于 2013-03-19T15:16:59.237 回答
0

execution(* *..ProductManager.*(..))意味着,“对于 ProductManager 类中的所有方法”

tx:advice 设置不是附加的。它表示所有以save开头的方法都使用默认事务设置。对于其他人,此设置意味着它们不是只读事务。

对于常识,人们会期望

<tx:method name="save*" read-only="false" />
<tx:method name="*" />
于 2013-03-04T07:59:26.153 回答