我正在尝试定义一个切入点,当调用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命令行arg。我有以下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中建议一个类,但根本没有运行......我确信我必须在切入点定义中犯一些错误。有人可以帮忙吗?
答案 0 :(得分: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论坛的Marten)。