2013-03-04 83 views
0

我已经“继承了”旧的传统Spring应用程序。目前它使用的是Spring 2.5(只是升级了一次),并希望将其进一步升级到Spring 3.Legacy Spring应用程序 - 切入点值是什么意思?

我明白大部分的应用程序配置。只有一部分我“不是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(..)。)” 平均(我的理解切入点说法)
  • 在ATTRIB utes我们所说的建议中的一部分将事务应用于所有保存*相关的方法,并且对于所有的只读是错误的。任何人都可以解释为什么这个设置有意义吗对于所有具有事务支持的方法(即只保存*方法),它是否具有附加性和有效性,我也希望这些方法不是只读事务。或者它将不同的东西(即某种形式的事务支持)应用于每个包含transacion过滤器的方法(在切入点中定义)。

感谢您的任何澄清。请不要普遍的答案 - 我需要一个具体的解释。

回答

0

execution(* *..ProductManager.*(..))表示,“在ProductManager类的所有方法”

TX:建议设置不是添加剂。 它说,对于所有以保存开头的方法,使用默认的事务设置。 对于其他人,此设置意味着它们不是只读事务。

对于常识,人们所期望的

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

Arikusu - 谢谢你,很大的反响,并与我的理解赞同。这是我在一年中合作过的最差的高质量应用程序之一。不幸的是,代码库中没有* ProductManager *类,所以我猜想事务管理在水中已经死了。我完全赞同你保存*行,通常是你所规定的只读行。它是那些你不能直观的应用程序之一。没有一个测试案例,这个应用程序必须已经建成并支持超过6 - 8年。是的,这些应用程序仍然在那里。 – arcseldon 2013-03-04 12:23:43

+0

错字 - 不只是只读,重新保存方法 – arcseldon 2013-03-04 12:51:07

2

由于tx:method有属性read-only默认值设置为false,意味着事务是读/写。

在我看来

所以,

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

相当于

<tx:method name="*" />