Sometimes there's a need to know the order of method interceptors that intercept a method call in Guice. A simple example scenario would be to use guice-persist provided @Transactional method interceptor with a custom @Retry method interceptor. The retry interceptor must be run outside of the transactional interceptor to make sure the retries are not executed within the same transaction.
In Spring you could use the Ordered interface for the interceptor to make sure the transaction interceptor is executed within the retry interceptor. Is there a way to achieve the same in Guice?
Guice invokes the interceptors in the order in which they were registered. So if you define them something like this:
bindInterceptor(any(), annotatedWith(Retry.class), retryInterceptor);
bindInterceptor(any(), annotatedWith(Transactional.class), transactionalInterceptor);
or
bindInterceptor(any(), annotatedWith(Retry.class), retryInterceptor, transactionalInterceptor);
the retryInterceptor
will be executed before the transactionalInterceptor
.
Same applies if you have multiple modules - the interceptors from first module are executed before the interceptors of the seconds module and so on.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With