8

I'm a beginner in AspectJ so please guide me to resolve the issue happening as per the below approach.

    @Aspect
    public class TestAop {

    @Pointcut("execution(public * com.packg.foo.ClassOne.*(..))")
    public void fooPoint()

    @Pointcut("execution(public * com.packg.cat.ClassTwo.*(..))")
    public void catPoint()

    @Pointcut("execution(public * com.packg.roo.ClassThree.*(..))")
    public void rooPoint()

    @Around("fooPoint() || catPoint() || rooPoint()") 
    public Object myAdvice(ProceedingJoinPoint joinPoint) {
    //do something like joint proceed and all
    }

When it is not working ? If I combine all the three pointcuts with OR .

When it is working ? If i keep only two pointcuts it is working.

Am I vioalating any rules of @around advice. Is it possible to have multiple execution/pointcuts?

Hoping for the answers...

mdparthi
  • 123
  • 1
  • 2
  • 6

2 Answers2

21

I had same problem but better solution IMO is(works for me):

@Aspect
public class TestAop {

@Pointcut("execution(public * com.packg.foo.ClassOne.*(..)) || execution(public * com.packg.cat.ClassTwo.*(..)) || execution(public * com.packg.roo.ClassThree.*(..))")
public void fooPoint(){}

@Around("fooPoint()")
public Object myAdvice(ProceedingJoinPoint joinPoint) {
//do something like joint proceed and all
}
Aritz
  • 30,971
  • 16
  • 136
  • 217
adamr
  • 740
  • 6
  • 18
2

I have solved the above issue by creating different advice for each pointcut. I just found an alternate solution, but i'm still not convinced with that.

@Aspect
public class TestAop {

@Pointcut("execution(public * com.packg.foo.ClassOne.*(..))")
public void fooPoint()

@Pointcut("execution(public * com.packg.cat.ClassTwo.*(..))")
public void catPoint()

@Pointcut("execution(public * com.packg.roo.ClassThree.*(..))")
public void rooPoint()

@Around("fooPoint()") 
public Object myFooAdvice(ProceedingJoinPoint joinPoint) {
//do something like joint proceed and all
}

@Around("catPoint()") 
public Object myCatAdvice(ProceedingJoinPoint joinPoint) {
//do something like joint proceed and all
}

@Around("rooPoint()") 
public Object myRooAdvice(ProceedingJoinPoint joinPoint) {
//do something like joint proceed and all
}
mdparthi
  • 123
  • 1
  • 2
  • 6
  • It can be problematic, when some pointcuts happen to overlap (in above example they don't as they are in different packages). – bastiat Oct 01 '19 at 06:32