java - 避免 AOP 中重叠的切入点和切面

标签 java aop aspectj spring-aop pointcut

包装内 com.repository 我有:

  1. 扩展 spring data Repository 的独立接口(interface)
  2. 在同一个包中使用我自己的实现扩展 spring data Repository 的接口(interface)
  3. 实现我的存储库接口(interface)的存储库类

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

现在

@Pointcut("执行(public * com.repository..(..))")

我有一些方法记录了两次 - 来自接口(interface)和实现该接口(interface)的类。我不想记录在同一包中实现类的接口(interface)中的方法,或者不记录在同一包中实现接口(interface)的类中的方法。

如何用切入点和建议来表达它?

我的问题与 AspectJ : Issue when combining multiple pointcuts in @Around advice 有点相关,但这并不能解决我的问题。

最佳答案

如果您正在监视的对象位于特定包,为什么您不将切入点仅绑定(bind)到该包。

所以使用

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

而不是

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

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

关于java - 避免 AOP 中重叠的切入点和切面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58180049/

相关文章:

java - RabbitMQ - 获取排队消息的总数

java - 哪种 Java 静态分析工具最容易扩展?

java - Hibernate Tools 4.0.0 检测不与 MySQL Db 一起使用的多对多表

java - 如何通过触摸屏输入修改 Opengl 形状?

java - Spring AOP 切入点表达式中包名称的通配符支持

java - 同一连接点上有多个 @Around AspectJ

java - AspectJ 从另一个特定方法到方法的切入点

java - 在运行时更改 guice 实例的值

java - Android/Java 重复按钮点击

Java:Spring RestControllerAdvice 异常处理程序中未触发自定义枚举 validator 注释