2014-07-22 7 views
1

Guice의 메소드 차단 기능으로 작업하고 있습니다. 내가 알아야 제대로 형태의 다중 인터셉터를 구현하는 방법입니다 : 특히Guice의 다중 메소드 차단

this.bindInterceptor(Matchers.any(), Matchers.any(), new Interceptor1(), new Interceptor2()); 

모두 인터셉터()에서 진행, 무슨 일이의 호출이있는 경우? 도청 된 메소드가 두 번 호출 되는가? 또는 첫 번째 인터셉터의 proceed()가 두 번째 인터셉터를 호출 한 다음 메서드를 호출합니까? 또는 하나의 인터셉터가 proceed()를 가지고 있어야합니까?

감사

+0

가능한 중복 [? Guice의 메소드 인터셉터의 순서를 정의하는 방법 (http://stackoverflow.com/questions/8308203/how-to-define-order : 귀하의 예제에서는이 같을 것이다 -of-method-interceptors-in-guice) – condit

+0

인터셉터의 순서를 이해합니다. 내가 잘 모르는 것은 proceed()로 메소드 자체를 시작해야한다는 것입니다. –

답변

2

두 인터셉터 (그리고해야한다) proceed를 호출 할 수 있습니다. 이렇게하면 독립적 인 측면 (즉, 트랜잭션 및 로깅)으로 사용할 수 있습니다. 사실 당신이 외부 요격기에서 진도를 요구하지 않으면 다음 요격기가 발사되지 않습니다.

메서드 인터셉터는 bindInterceptor 호출 순서에 따라 스택 방식으로 호출됩니다.

Interceptor1 entry 
Interceptor1 proceed 
    Interceptor2 entry 
    Interceptor2 proceed 
    Method 
    Interceptor2 exit 
Interceptor1 exit 
+0

그건 내 직감이지만, 나는 확신하고 싶었다. 감사. –

+0

간단하고 명확한 멋진 소식! –