Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Aspectj aspect for specifying multiple packages

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

like image 237
crankparty Avatar asked Oct 19 '11 09:10

crankparty


People also ask

Which annotation in AspectJ helps us to identify aspects?

@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 a @before B @after C @AfterReturning D All of the mentioned?

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.

What is the difference between JoinPoint and PointCut?

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.

What is aspect advice PointCut JoinPoint and advice arguments in AOP?

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.


1 Answers

&& 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.

like image 98
Roadrunner Avatar answered Oct 22 '22 03:10

Roadrunner