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
@AspectJ refers to a style of declaring aspects as regular Java classes annotated with Java 5 annotations. The @AspectJ style was introduced by the AspectJ project as part of the AspectJ 5 release.
Which of the following is advice supported by Aspect Annotation? Explanation: AspectJ supports five types of advice annotations: @Before, @After, @AfterReturning, @AfterThrowing, and @Around. 3. An advice is an action which comes into play at pointcuts.
JoinPoint: Joinpoint are points in your program execution where flow of execution got changed like Exception catching, Calling other method. PointCut: PointCut are basically those Joinpoints where you can put your advice(or call aspect). So basically PointCuts are the subset of JoinPoints.
Aspect Oriented Programming Core Concepts Join Point: A join point is a specific point in the application such as method execution, exception handling, changing object variable values, etc. In Spring AOP a join point is always the execution of a method. Advice: Advices are actions taken for a particular join point.
&&
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With