Как определить порядок перехватчиков метода в Guice? - PullRequest
11 голосов
/ 29 ноября 2011

Иногда необходимо знать порядок перехватчиков методов, которые перехватывают вызов метода в Guice.Простым примером сценария может быть использование guice-persist, предоставляемого перехватчиком метода @Transactional с пользовательским перехватчиком метода @Retry.Перехватчик повторных попыток должен быть запущен за пределами перехватчика транзакций, чтобы убедиться, что повторные попытки не выполняются в рамках одной и той же транзакции.

В Spring можно использовать интерфейс Ordered для перехватчика, чтобы убедиться, что перехватчик транзакции выполняетсяперехватчик повторов.Есть ли способ добиться того же в Guice?

1 Ответ

18 голосов
/ 30 ноября 2011

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

bindInterceptor(any(), annotatedWith(Retry.class), retryInterceptor);
bindInterceptor(any(), annotatedWith(Transactional.class), transactionalInterceptor);

или

bindInterceptor(any(), annotatedWith(Retry.class), retryInterceptor, transactionalInterceptor);

retryInterceptor будет выполнено до transactionalInterceptor.

То же самое применимо, если у вас несколько модулей - перехватчики из первого модуля выполняются раньше, чем перехватчики модуля секунд и т. Д.

...