2012-07-17 63 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