8

我是 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 建议的任何规则。是否可以有多个执行/切入点?

期待答案...

4

2 回答 2

19

我有同样的问题,但更好的解决方案 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
}
于 2014-01-15T19:57:47.410 回答
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
}
于 2012-07-28T18:41:32.473 回答