2012-07-18 80 views
3

我是AspectJ的初學者,所以請指導我解決按照以下方法發生的問題。AspectJ:在@Around中合併多個切入點時出現問題的建議

@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建議的任何規則。是否有可能有多個執行/切入點?

盼望的答案...

+0

沒有跳出來,它看起來不錯,你能確認你正在使用AspectJ和不Spring AOP的? – 2012-07-18 13:44:35

+0

我只使用Aspectj。 – mdparthi 2012-07-19 11:59:22

回答

0

我已經通過爲每個切入點創建不同的意見解決了上述問題。 我剛剛找到了一個替代解決方案,但我仍然不相信。

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

我有同樣的問題,但更好的解決辦法是國際海事組織(爲我的作品):

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