AspectJ:在@Around建议中组合多个切入点时出现问题

时间:2012-07-18 13:09:29

标签: aop aspectj execution pointcuts

我是AspectJ的初学者,所以请指导我按照以下方法解决发生的问题。

    @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
    }

什么时候不工作? 如果我将所有三个切入点与OR组合。

什么时候工作? 如果我只保留两个切入点,那就可以了。

我是否违反了@around建议的任何规则。是否可以有多个执行/切入点?

希望得到答案......

2 个答案:

答案 0 :(得分:13)

我有同样的问题,但更好的解决方案IMO(对我有用):

@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
}

答案 1 :(得分:2)

我通过为每个切入点创建不同的建议来解决上述问题。 我刚刚找到了另一种解决方案,但我仍然不相信。

@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
}