Aspectj aspect for specifying multiple packages

2020-06-17 05:44发布

I wanted to specify a pattern for aspectj @Around aspect that includes multiple packages.

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

Pattern which i used :

@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

But this pattern doesnt seem to work. Though specifying a single pattern without && condition works.

Can someone suggest whats wrong with this pattern?

Thanks,
Gayathri

1条回答
【Aperson】
2楼-- · 2020-06-17 06:29

&& stands for logical AND. What You need here is a logical OR, that in AspectJ is ||.

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

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

@Pointcut("methodInDddPackage() || methodInEeePackage()")
public void methodInDddOrEeePackage() {}

Below equivalent inline expression:

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

See this Spring AOP documentation page for more details.

查看更多
登录 后发表回答