2013-11-04 4 views
1

스프링 AOP 트리거를 처음 사용합니다. 내 코드에 다음과 같은 pointcut 트리거가있다. 첫 번째 포인트 컷 트리거 (com.src.a()) 만 작동하고 아래의 나머지는 4 개의 모든 pointcut가 정의 될 때 트리거되지 않습니다. 그러나 4 가지 중 하나에서 하나의 pointcut 트리거 만 정의하면 잘 작동합니다. 첫 번째 트리거 이후의 트리거가 4 개가 모두 정의되었을 때 작동하지 않는 이유를 잘 모릅니다. 도움 요청 중 ...스프링 AOP 포인트 컷

  @AfterReturning ( 
     pointcut = "execution(* com.src.a(..)) " 
    + "OR execution(* com.src.b(..)) " 
    + "OR execution(* com.src.c(..)) " 
    + "OR execution(* com.src.d(..))") 

    public void src () throws Throwable { 

    .... 
    } 

답변

0

"dumy"pointcut를 정의하여 여러 개의 pointcut를 정의하고 결합 할 수 있습니다. 아마 && 또한 문서 http://docs.spring.io/spring/docs/2.0.8/reference/aop.html

@Pointcut("execution(public * *(..))") 
    private void anyPublicOperation() {} 

    @Pointcut("within(com.xyz.someapp.trading..*") 
    private void inTrading() {} 

    @Pointcut("anyPublicOperation() && inTrading()") 
    private void tradingOperation() {} 
+0

감사 예브게니에서

을 (& &로 대체 'OR') 당신의 aproach에서 작동합니다. 나는 이것을 시도 할 것이다. –

+0

OR를 &&로 대체하면 ... &&는 AND가 아니라 OR을 의미합니다 ... 그러면 모든 부품을 한번에 일치시키지 않으므로 그의 pointcut이 쓸모 없게됩니다! ... && try || (이는 OR을 의미 함). 그것들을 직접적으로 또는 명명 된 pointcuts로 정의하는 것은 중요하지 않다. 런타임 결과는 동일 할 것이다. –

+0

동의합니다. 맞습니다. –

관련 문제