【问题标题】:Advising javax.persistence.EntityManager with AspectJ not working建议 javax.persistence.EntityManager 与 AspectJ 不工作
【发布时间】:2012-08-02 13:30:59
【问题描述】:

我正在尝试用 AspectJ 和 Spring 为 javax.persistence.EntityManager 提供建议。它只是不起作用:控制台上没有错误,也没有 "caught"...

这是我的方面:

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"/>

【问题讨论】:

  • 使用call 代替execution 有效。为什么会这样:我不知道...如果在 AspectJ 方面经验更丰富的人可以提供一个很好的解释。

标签: spring aspectj entitymanager


【解决方案1】:

调用和执行的区别是:

call 建议您的代码,execution 建议目标代码(在此上下文中,建议大致意味着:更改字节码)。而且由于目标代码位于编译器无法访问的 jar 中,因此这不起作用。

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

【讨论】:

  • 不过有一个问题:javax.persistence.EntityManager 是否被视为我的代码
  • 不,它在一个外部 jar 中。您的代码就是您正在编译的代码。您不是在编译 Entitymanager,而是在链接它。那是有区别的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
相关资源
最近更新 更多