代码之家  ›  专栏  ›  技术社区  ›  MikaelW

AOP,如何仅在直接从包X发出时拦截对给定类的调用

  •  -1
  • MikaelW  · 技术社区  · 7 年前

    我想拦截对某个对象的所有调用: org.springframework.data.redis.core.StringRedisTemplace (例如。 save(); delete(); )但只有当电话直接从我的公司内部发出时,许多包裹 com.mycompany.* ,而不是当 StringRedisTemplace 由第三方库或spring/data/redis本身使用。

    有没有一种方法可以用AOP注释做到这一点,比如 @Pointcut @Around 等。我的搜索/尝试失败。

    因此,一句话=>如何拦截/检测对某个类的所有实例的所有调用,只要这些实例在我的公司包中实例化和使用。

    1 回复  |  直到 7 年前
        1
  •  1
  •   kriegaex    7 年前

    好吧,你几乎是自己说的:

    但只有在直接从 在内部 我的一个公司有很多包裹 com.mycompany.*

    您需要的切入点类型确实被命名为 within . 有一个相关的名为 withincode 在完整的AspectJ中,但是基于代理的Spring AOP只支持前者,而不支持后者。对于后者,您必须在Spring中通过LTW使用完整的AspectJ。春季手册的 AOP chapter .

    你想做的事情是这样的:

    within(com.mycompany..*) && call(org.springframework.data.redis.core.StringRedisTemplate+.*(..))