【问题标题】:Aspectj aspect for specifying multiple packages用于指定多个包的 Aspectj 方面
【发布时间】:2011-10-19 09:38:44
【问题描述】:

我想为包含多个包的 aspectj @Around aspect 指定一个模式。

Example : package 1 : aaa.bbb.ccc.ddd
          package 2 : aaa.bbb.ccc.eee 
          package 3 : aaa.bbb.ccc.eee.fff

我使用的模式:

@Around("execution(* aaa.bbb.ccc.ddd.*.*(..)) && execution(* aaa.bbb.ccc.eee..*.*(..))")
    i.e Intercept packages aaa.bbb.ccc.ddd, aaa.bbb.ccc.eee and any sub-package of aaa.bbb.ccc.eee

但这种模式似乎不起作用。虽然指定一个不带 && 条件的模式是可行的。

有人可以建议这种模式有什么问题吗?

谢谢,
加亚特里

【问题讨论】:

    标签: java spring aspectj


    【解决方案1】:

    && 代表逻辑 AND。你需要的是一个符合逻辑的OR,在AspectJ 中是||

    @Pointcut("execution(* aaa.bbb.ccc.ddd.*.*(..))")
    public void methodInDddPackage() {}
    
    @Pointcut("execution(* aaa.bbb.ccc.eee.*.*(..))")
    public void methodInEeePackage() {}
    
    @Pointcut("methodInDddPackage() || methodInEeePackage()")
    public void methodInDddOrEeePackage() {}
    

    以下等效的内联表达式:

    @Pointcut("execution(* aaa.bbb.ccc.ddd.*.*(..)) || execution(* aaa.bbb.ccc.eee.*.*(..))")
    public void methodInDddOrEeePackageInline() {}
    

    有关更多详细信息,请参阅此Spring AOP documentation 页面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多