2012-07-17 94 views
1

由於某種原因,我的Spring AOP建議被調用兩次。我查了一下:Spring AOP建議叫做Twice

  1. Spring AOP advice is called twice,但我不使用的組件註釋,和我曾經聲明方面豆,用@Aspect註解它,就是這樣。

  2. 有點遲到我意識到我的一個類沒有實現一個接口,這導致了CGLIB2的要求。我解決了這個問題,CGLIB2問題消失了,但雙重調用依然存在。

編輯:

忘了提,我檢查,被通知的方法不叫了兩次。

2日編輯:

我聲明一個類有@Aspect,然後我宣佈它作爲應用程序上下文的bean。 XML文件中沒有建議或切入點。

3日編輯:

另外值得一提的是,我之前和方法執行後日志被建議與周邊:

log.info("before"); 

pjp.proceed(); 

log.info("after"); 

我看到的是:

before 
before 
after 
after 

這真的很奇怪。

這種情況發生在我設置的@Before和@Around建議中。我還沒有嘗試其他類型。

這裏是切入點聲明,以更改後的名稱:

@Around("execution(public java.util.List<java.lang.String> pac.age.names.myDAO.doSomething(java.lang.String, java.lang.String))") 

任何想法?

感謝,

浮潛

+0

你正在掃描軟件包嗎?你說你正在聲明aspect bean一次(用xml?),然後註釋它。這會導致雙重調用。 – 2012-07-17 04:53:25

+0

我正在使用 然後我有一個實現了建議的類。 AFAIK,這些都是最簡單的步驟。謝謝! – MrSilverSnorkel 2012-07-17 05:01:04

+2

如果你的建議被調用兩次,但只有方法被稱爲一個,你可能調用兩種不同的方法嗎? – jddsantaella 2012-07-17 05:15:22

回答

3

嗯,好像這其實是記錄器的問題。今天早上我檢查了一下,發現一切都被記錄了兩次。當我用普通的sysout調用替換記錄器調用時,一切正常。

+0

謝謝......同樣的問題也讓我瘋狂了一陣子! – 2013-07-05 08:38:53