2010-02-15 21 views
18

我在Spring(2.5.6版)中有一個切入點定義的問題。我試圖截取所有的方法調用到一個類,除了給定的方法(someMethod在下面的例子中)。用於AND,OR和NOT的Spring AOP切入點語法

<aop:config> 
    <aop:advisor 
     pointcut="execution(* x.y.z.ClassName.*(..)) AND NOT 
        execution(* x.y.x.ClassName.someMethod(..))" 
    /> 
</aop:config> 

但是,攔截器也被調用someMethod。

然後我嘗試這樣的:

<aop:config> 
    <aop:advisor 
     pointcut="execution(* x.y.z.ClassName.(* AND NOT someMethod)(..)))" 
    /> 
</aop:config> 

但這並不能編譯,因爲它是無效的語法(我得到一個BeanCreationException)。

任何人都可以給任何提示嗎?

+0

你有沒有考慮用@AspectJ風格寫作方面的邏輯呢?用Java編寫方面邏輯要簡單得多,功能也更強大。特別是如果你使用AJDT插件的Eclipse。 – Espen

回答

18

我知道它可能有點在這一階段後期,但我一直有同樣的問題,我通過轉義&符號字符所以其&amp;&amp; !,而不是「解決它AND NOT'或'& &!'。 我這樣做是在XML文件

<aop:config> 
    <aop:pointcut id="blah" expression="execution(* com.disney.goofy..*.*(..)) &amp;&amp; [email protected](com.disney.goofy.NonDisneyCharacter)"/> 
    <aop:advisor advice-ref="transAdvice" pointcut-ref="blah"/> 
</aop:config> 

這適用意見,以在com.disney.goofy執行,不與NonDisneyCharacter

4

這應該工作(spring AOP reference):

pointcut="execution(* x.y.z.ClassName.*(..)) 
      && !execution(* x.y.x.ClassName.someMethod(..))" 
+2

恐怕不起作用。請注意,Spring引用說&&> AND和! >不在XML文件中。無論如何,謝謝你的提示:) – Odinodin

1

我還使用Spring 2.5的註釋的所有方法。 6並且與不起作用有類似的問題,但正在工作。事實證明,(小寫)確實工作,所以在該代碼中顯然存在一個錯誤。

有意思的是,正確的AspectJ的語法是& &||,但是和/或/不是語法是春天添加使在xml工作更容易。從手動:

當需要連接 子表達式,「& &」是笨拙 XML文檔中,所以 關鍵字「和」,「或」和「不」可以 使用代替'& &','||'和'!'分別爲 。

我猜想,因爲& &是唯一一個是實際上尷尬的XML(沒有什麼困難關於把|!或XML),然後是,是唯一一個經過適當測試