避免在 AOP 中重叠切入点和方面

Avoid overlaping pointcuts and aspects in AOP

包中 com.repository 我有 :

  1. 扩展 spring 数据存储库的独立接口
  2. 在同一包中使用我自己的实现扩展 spring 数据存储库的接口
  3. 存储库class实现了我的存储库接口

我想测量 com.repository 包(与数据库通信)中所有方法的执行时间。 但我想避免重复

现在

@Pointcut("execution(public * com.repository..(..))")

我有一些方法记录了两次 - 来自接口和 class 实现此接口。我不想记录在同一个包中实现了 class 的接口的方法,或者不记录在同一个包中实现了接口的 classes 的方法。

如何用切入点和通知来表达?

我的问题和AspectJ : Issue when combining multiple pointcuts in @Around advice有点关系,但是没有解决我的问题

如果您要监视的对象位于特定包中,为什么不将切入点仅绑定到该包。

所以使用

@Pointcut("execution(* com.repository.*.*(..))")

而不是

@Pointcut("execution(public * com.repository..*.*(..))")

其中包括 "com.repository" 包及其所有子包。