methods - que - ¿Cómo definir el orden de los interceptores de métodos en Guice?
interceptores java ejemplo (1)
Guice invoca a los interceptores en el orden en que fueron registrados. Entonces, si los defines algo como esto:
bindInterceptor(any(), annotatedWith(Retry.class), retryInterceptor);
bindInterceptor(any(), annotatedWith(Transactional.class), transactionalInterceptor);
o
bindInterceptor(any(), annotatedWith(Retry.class), retryInterceptor, transactionalInterceptor);
retryInterceptor
se ejecutará antes del transactionalInterceptor
.
Lo mismo se aplica si tiene múltiples módulos: los interceptores del primer módulo se ejecutan antes que los interceptores del módulo de segundos, y así sucesivamente.
A veces es necesario conocer el orden de los interceptores de métodos que interceptan una llamada a un método en Guice. Un escenario de ejemplo simple sería usar el interceptor de método @Transactional proporcionado por guice-persist con un interceptor de método @Retry personalizado. El interceptor de reintentos debe ejecutarse fuera del interceptor transaccional para asegurarse de que los reintentos no se ejecuten dentro de la misma transacción.
En Spring, puede usar la interfaz ordenada para el interceptor para asegurarse de que el interceptor de transacción se ejecuta dentro del interceptor de reintentos. ¿Hay alguna manera de lograr lo mismo en Guice?