【问题标题】:Avoid overlaping pointcuts and aspects in AOP避免 AOP 中的切入点和切面重叠
【发布时间】:2020-01-30 11:10:58
【问题描述】:

包装内 com.repository 我有:

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

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

现在

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

我有一些方法被记录了两次——来自接口和实现这个接口的类。我想要么不记录在同一个包中实现类的接口的方法,要么不记录实现同一个包的接口的类的方法。

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

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

【问题讨论】:

  • 解释将有助于您的代码说明。不幸的是,该代码丢失了。你的MCVE 在哪里?根据您的解释,即使您认为可能,也无法准确地说明您的情况。但即使是这样,我也无法编译您的散文、运行它并修复您的方面和切入点。做一名开发者:让代码说话!

标签: java aop aspectj spring-aop pointcut


【解决方案1】:

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

所以用

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

而不是

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多