2012-08-02 89 views
3

我想通知AspectJ和Spring的javax.persistence.EntityManager。这是行不通的:没有错误,没有“中招”在控制台上...建议javax.persistence.EntityManager与AspectJ不起作用

这里是我的方面:

package trc.suivi.aspects; 

public aspect EventManagerAspect { 

    public EventManagerAspect() {} 

    pointcut catchIt() : (execution(* javax.persistence.EntityManager.persist(..))); 

    after() returning: catchIt() { 
     System.out.println("caught"); 
    } 

} 

这是我如何配置我的方面在春季:

<bean class="trc.suivi.aspects.EventManagerAspect" factory-method="aspectOf"/> 
+0

使用'call'而不是'execution'工作。为什么是这样的:我不知道......如果AspectJ中更经验丰富的人可以跳出来提供一个很好的解释。 – balteo 2012-08-02 14:00:10

回答

3

调用和执行之间的区别是:

call你建议你的代码,execution你建议目标代码(在这种情况下,建议粗略的意思是:改变字节代码)。由于目标代码位于编译器无法访问的jar文件中,因此无法使用。

使用call将在大多数情况下使用,但如果您绝对需要使用execution,则必须使用aspectj重新编译外部库或使用加载时编织。

+0

虽然有一个问题:是'javax.persistence.EntityManager'考虑**我的代码**? – balteo 2012-08-02 15:12:04

+1

不,它在外部的罐子里。您的代码是您正在编译的代码。你没有编译Entitymanager,你正在链接它。这是一个区别。 – 2012-08-02 15:31:57

相关问题