AspectJ : Issue when combining multiple pointcuts in @Around advice
Вопрос
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...
Решение
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
}
Другие советы
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
}
Не связан с StackOverflow