2

我正在尝试定义一个切入点,当调用来自 Spring Data JPA 存储库的方法时,它的建议将运行。

这是我的匿名切入点以及内联建议(来自PliEventManagerAspect):

after(Pli pli) returning: (execution(* org.springframework.data.repository.CrudRepository+.save(Pli)) && args(pli)){
    System.out.println("Caught!!!!");   
}

这里是我的 PliRepository 的定义:

public interface PliRepository extends GlobalRepository<Pli, Long>, PliRepositoryCustom {

和 PliRepositoryImpl:

public class PliRepositoryImpl extends QueryDslRepositorySupport implements PliRepositoryCustom {

和 PliRepositoryCustom:

public interface PliRepositoryCustom {

最后是 GlobalRepository:

@NoRepositoryBean
public interface GlobalRepository<T, ID extends Serializable> extends JpaRepository<T, ID> {

我还设置了 javaagent 命令行参数。我有以下aop.xml:

<!DOCTYPE aspectj PUBLIC
"-//AspectJ//DTD//EN"
"http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
    <weaver options="-verbose">
        <include within="org.springframework.data.repository..*"/>
    </weaver>
    <aspects>
        <aspect name="trc.suivi.aspects.PliEventManagerAspect" />
    </aspects>
</aspectj>

上面的建议应该在 LTW 中运行,因为它建议 jar 中的一个类,但根本没有运行......我确信我必须在切入点定义中犯一些错误。有人可以帮忙吗?

4

1 回答 1

1

我更改为以下配置:

aop.xml:

<!DOCTYPE aspectj PUBLIC
"-//AspectJ//DTD//EN"
"http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
    <weaver options="-verbose"></weaver>
    <aspects>
        <aspect name="trc.suivi.aspects.PliEventManagerAspect" />
    </aspects>
</aspectj>

因此,织布工扫描所有类。

PliEventManagerAspect.aj:

after(Pli pli) returning: (execution(* org.springframework.data.repository.CrudRepository+.save(*)) && args(pli)){
        log.debug("Caught!!!!");  
    }

它现在可以工作了(感谢 Spring Forums 的 Marten)。

于 2012-10-08T14:23:51.713 回答