我正在尝试使用AspectJ和Spring建议javax.persistence.EntityManager.它只是行不通:没有错误,在控制台上也没有“抓到” …
这是我的方面:
package trc.suivi.aspects;
public aspect EventManagerAspect {
public EventManagerAspect() {}
pointcut catchIt() : (execution(* javax.persistence.EntityManager.persist(..)));
after() returning: catchIt() {
System.out.println("caught");
}
}
这是我在Spring中配置方面的方式:
<bean class="trc.suivi.aspects.EventManagerAspect" factory-method="aspectOf"/>
解决方法:
调用和执行之间的区别是:
通过调用,您建议代码,在执行时,您建议目标代码(在这种情况下,大致建议是:更改其字节码).而且由于目标代码在jar中,您的编译器无法访问,所以这将无法工作.
在大多数情况下,使用call即可,但是如果您绝对需要使用执行,则必须使用Aspectj重新编译外部库,或者使用加载时编织.