web-dev-qa-db-fra.com

Ordre d'exécution de ServletContextListener

Comment définir l'ordre d'initialisation de l'application due à l'exécution de ServletContextListener, si j'ai plusieurs ServletContextListener et certains d'entre eux déclarés dans le descripteur de déploiement et d'autres avec annotation (@WebListener)?

38

Si vous souhaitez exécuter des écouteurs dans un ordre particulier, vous devez utiliser le descripteur de déploiement pour les définir.

Les instructions ci-dessous sont copiées de spécification de servlet :

8.2.3 :

Si l'ordre dans lequel les écouteurs, les servlets et les filtres sont appelés est important pour une application, un descripteur de déploiement doit être utilisé. Lorsque vous utilisez des annotations pour définir les écouteurs, les servlets et les filtres, l'ordre dans lequel ils sont appelés n'est pas spécifié.

L'ordre sera basé sur l'ordre dans lequel ils sont définis dans le descripteur et sur l'élément d'ordre absolu dans le web.xml ou un élément de commande dans le web-fragment.xml.

Avant cette version de la spécification (Java ™ Servlet Specification, version 3), les écouteurs de contexte étaient invoqués dans un ordre aléatoire. Depuis Servlet 3.0, les écouteurs sont appelés dans l'ordre dans lequel ils sont déclarés dans le web.xml.

Implémentations de javax.servlet.ServletContextListener sont invoqués à leur méthode contextInitialized dans l'ordre dans lequel ils ont été déclarés, et à leur méthode contextDestroyed dans l'ordre inverse.

Si vous avez plusieurs ServletContextListeners et que certains d'entre eux sont déclarés dans le descripteur de déploiement et d'autres avec des annotations, alors ce sont les écouteurs définis dans web.xml qui aura la priorité. L'instruction ci-dessous est copiée de la même section (8.2.3) de la spécification de servlet:

La configuration spécifiée dans le web.xml principal ou un fragment Web a priorité sur la configuration spécifiée via des annotations.

71
Debojit Saikia

Il semble que vous connaissiez l'ordre d'exécution, mais vous voulez savoir ce que ce sera si certains écouteurs sont déclarés dans le descripteur de déploiement et d'autres à l'aide d'annotations, de sorte que la préférence est prise par le descripteur de déploiement puis par l'annotation.

Notez que les constructeurs de tous les écouteurs seront appelés d'abord par ordre de descripteur de déploiement, puis annotation, puis les méthodes de cycle de vie dans le même ordre.

7
Mr Spark