Aspectj方面用于指定多个包

时间:2011-10-19 09:38:44

标签: java spring aspectj

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

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

但这种模式似乎不起作用。虽然指定了一个没有&&的单一模式条件有效。

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

谢谢,
Gayathri

1 个答案:

答案 0 :(得分:19)

&&代表逻辑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页面。