Множественные перехваты методов в Guice

Я работаю с функцией перехвата метода Guice. Что мне нужно знать, это как правильно реализовать несколько перехватчиков, в форме:

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

Что конкретно происходит, если в обоих перехватчиках вызывается продолжить ()? Перехваченный метод вызывается дважды? Или continue () в первом перехватчике вызывает второй перехватчик, который затем вызывает метод? Или только у одного перехватчика должна быть продолжить ()?

Спасибо

1 ответ

Решение

Оба перехватчика могут (и должны) вызывать proceed, Таким образом, они могут использоваться как независимые аспекты (например, транзакции и ведение журнала). Фактически, если вы не вызываете исходящий от вашего внешнего перехватчика, следующий перехватчик не сработает.

Перехватчики методов будут вызываться стековым способом, основанным на порядке bindInterceptor звонки. В вашем примере это будет выглядеть так:

Interceptor1 entry
Interceptor1 proceed
  Interceptor2 entry
  Interceptor2 proceed
    Method
  Interceptor2 exit
Interceptor1 exit
Другие вопросы по тегам